我有一个Express服务器,我的应用程序是从app.get('*')路由提供的。
我希望有促销代码的用户从一个活动网址访问该网站,如:www.mysite.com/?code=123。
问题是每个浏览器请求都被路由到favicon请求,因此我的req.url和req.query变量不能用来获取促销代码。Req.url始终为/favicon.ico,req.query始终为空。
我确实发现原始URL是请求对象的头,但这似乎是实现我的目标的一种间接方法。请求对象的原始URL域也指向favicon.ico。
app.get('*', (req, res) => {
console.log(req.url);
console.log(req.query);
}我想暂时保持我的促销代码解决方案尽可能快和脏,所以我对URL参数没问题。有没有一种简单的解决方案来提取原始的URL查询参数,而不是深入到头中?
编辑:我现在在下面分享我的根请求处理程序。favicon请求由代码前面的express-favicon中间件处理。
app.get('*', (req, res) => {
console.log("In get *");
console.log("Req.url: ",req.url);
console.log("Promo code: ",req.query.promo);
const context = {};
const app = ReactDOMServer.renderToString(
<StaticRouter location={req.url} context={context}>
<App />
</StaticRouter>
);
const indexFile = path.resolve('./public/index.html');
fs.readFile(indexFile, 'utf8', (err, data) => {
if (err) {
console.error('Something went wrong:', err);
return res.status(500).send('Oops, better luck next time!');
}
return res.send(
data.replace('<div id="root"></div>', `<div id="root">${app}</div>`)
);
});
})发布于 2019-08-27 03:53:31
问题是我使用的是React Router,它不支持查询参数:https://reacttraining.com/react-router/web/example/query-parameters
为了解决这个问题,我在客户端使用window.location.search来获取促销代码,然后通过一个显式的促销处理程序传递给后端。
发布于 2019-08-26 13:49:06
您可以接受动态值作为express中URL的一部分
接口调用==> www.mysite.com/dynamic_promo_code
app.get('/:promo_code',(req,res)=>{
// req.params will be and object holding your dynamic promo_code
const promo = req.params.promo_code; // this will be your dynamic promo code
});如果你希望你的促销代码是可选的,并且不想成为URL的一部分
接口调用==> www.mysite.com?promocode=dynamic_promo_code
app.get('/',(req,res)=>{
//req.query is an object holding your optional parameter
const code = req.query.promocode; // this will be yor dynamic promo code
})https://stackoverflow.com/questions/57651236
复制相似问题