首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node Express app.get(*) req.url始终为/favion.ico

Node Express app.get(*) req.url始终为/favion.ico
EN

Stack Overflow用户
提问于 2019-08-26 10:48:57
回答 2查看 1.2K关注 0票数 1

我有一个Express服务器,我的应用程序是从app.get('*')路由提供的。

我希望有促销代码的用户从一个活动网址访问该网站,如:www.mysite.com/?code=123

问题是每个浏览器请求都被路由到favicon请求,因此我的req.urlreq.query变量不能用来获取促销代码。Req.url始终为/favicon.icoreq.query始终为空。

我确实发现原始URL是请求对象的头,但这似乎是实现我的目标的一种间接方法。请求对象的原始URL域也指向favicon.ico

代码语言:javascript
复制
app.get('*', (req, res) => {
  console.log(req.url);
  console.log(req.query);
}

我想暂时保持我的促销代码解决方案尽可能快和脏,所以我对URL参数没问题。有没有一种简单的解决方案来提取原始的URL查询参数,而不是深入到头中?

编辑:我现在在下面分享我的根请求处理程序。favicon请求由代码前面的express-favicon中间件处理。

代码语言:javascript
复制
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>`)
      );
    });
})
EN

回答 2

Stack Overflow用户

发布于 2019-08-27 03:53:31

问题是我使用的是React Router,它不支持查询参数:https://reacttraining.com/react-router/web/example/query-parameters

为了解决这个问题,我在客户端使用window.location.search来获取促销代码,然后通过一个显式的促销处理程序传递给后端。

票数 0
EN

Stack Overflow用户

发布于 2019-08-26 13:49:06

您可以接受动态值作为express中URL的一部分

接口调用==> www.mysite.com/dynamic_promo_code

代码语言:javascript
复制
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

代码语言:javascript
复制
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
})
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57651236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档