Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node Express app.get(*)req.url始终为/favion.ico_Javascript_Node.js_Reactjs_Express_Server - Fatal编程技术网

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

Javascript Node Express app.get(*)req.url始终为/favion.ico,javascript,node.js,reactjs,express,server,Javascript,Node.js,Reactjs,Express,Server,我有一个Express服务器,我的应用程序通过该应用程序提供服务。获取“*”路由 我希望具有促销代码的用户可以从活动URL访问该网站,如:www.mysite.com/?code=123 问题是每个浏览器请求都被路由到favicon请求,因此我的req.url和req.query变量不能用于获取促销代码。Req.url始终为/favicon.ico,Req.query始终为空 我确实发现原始URL是请求对象的头,但这似乎是实现我目标的一种迂回方式。请求对象的原始URL字段也指向favicon.i

我有一个Express服务器,我的应用程序通过该应用程序提供服务。获取“*”路由

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

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

我确实发现原始URL是请求对象的头,但这似乎是实现我目标的一种迂回方式。请求对象的原始URL字段也指向favicon.ico

我想让我的促销代码解决方案尽可能快和脏的时间,所以我很好的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>`)
      );
    });
})

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

api调用==>www.mysite.com/dynamic\u promo\u code

如果您希望您的促销代码是有见解的,并且不想成为URL的一部分

api调用==>www.mysite.com?promocode=dynamic\u promo\u code


问题是我使用的是React Router,它不支持查询参数:


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

我认为您应该试试这个@AdilLiaqat,但它不起作用。app.get'/favicon.ico',req,res=>{console.logIn get/favicon;res.sendStatus204;};app.get'*',req,res=>{console.logIn get*;…//为React应用程序提供服务}只打印来自get/favicon的日志。奇怪的是,这个应用程序是由get*提供的,所以它一定是以某种方式执行的。但是控制台日志必须被重定向到其他地方。而且。。。这条神奇的法维康路线在哪里?它显然拦截了所有的东西?您确定点击促销页面不会同时导致对favicon和促销页面的请求吗?因为浏览器通常就是这样工作的。@KevinB我已经尝试使用显式favicon请求处理程序和处理请求的中间件。在这两种情况下,favicon都会返回,web应用程序会得到服务,但根get请求中的req.query URL为空。这或多或少就是我现在正在做的。问题是favicon请求劫持了调用,然后使用用户在标题中输入的URL重新路由到预期的URL。我将尝试用中间件解决这个问题。您可以将favicon路由置于这些路由之上。或者你可以分享你的代码,这样我可以帮助你谢谢。我将在上面分享我的代码。我已经把法维康路线放在这些上面了。facvicon路由被调用,然后请求被转发到根调用,原始URL被屏蔽。我现在正在使用中间件来处理favicon,但同样的事情正在发生。您的全部代码请与favicon和promo code联系使用app.get*?*基本上用于通配符输入,因此它也将用于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>`)
      );
    });
})
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
});
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
})