请求两个url节点表达

时间:2018-12-15 18:13:28

标签: node.js reactjs express

我想在node.js express中请求两个URL。 该网址属于以下类型:

app.get(/api/stats/:userId/, (req, res)..........)
app.get(/api/stats/seasonal/:userId/, (req, res)..........)

当我启动我的react应用程序并在这两个不同的URL上运行axios并将结果存储在两个不同的表中时,我得到的结果是相同结果的两倍:第一个链接的json文件的数据(/ api / stats /:用户身份 /)。 在stat方法中进行查询,其中包含两个不同的链接(请参见下文)。但是,这两个链接对应于两个不同的数据json。我连续几天都在搜索该问题的答案……谢谢您的帮助!

module.exports = class RS {

  stats(userId, seasonal) {
    return new Promise((resolve, reject) => {
      if(!userId || typeof userId !== 'string') return reject(new TypeError('Invalid username'));
      if(typeof seasonal !== 'boolean') return reject(new TypeError('Seasonal has to be a boolean'));
      var endpoint = `https://r6stats.com/api/stats/${userId}`;
      if(seasonal === true){
        endpoint = `https://r6stats.com/api/stats/${userId}/seasonal`;
      }
      request.protocol(endpoint, (error, response, body) => {
        if(!error && response.statusCode == '200') {
          return resolve(JSON.parse(body));
        } else {
          return reject(JSON.parse(body));
        }
      })
    })
  }

app.get('/api/stats/:userId/', (req, res) => {
    const userId = req.params.userId;
    try{
        R6.stats(userId).then(response => {
            res.send(response);
        }).catch(error => {
            console.error(error)
        });
    }catch(error){
        console.error(error);
    };
});

app.get('/api/stats/seasonal/:userId/', (req, res) => {
  const userId = req.params.userId;
  try{
      R6.stats(userId, true).then(response => {
          res.send(response);
      }).catch(error => {
          console.error(error)
      });
  }catch(error){
      console.error(error);
  };
});

1 个答案:

答案 0 :(得分:0)

Node.js中的中间件顺序很重要。因此,您的第二条路线将永远不会执行,因为第一条路线与URL匹配。

让我们以URL'/ api / stats / seasonal / 25'为例。应该执行第二条路线吧?

app.get(/api/stats/:userId/, (req, res)..........)
app.get(/api/stats/seasonal/:userId/, (req, res)..........)

但是第一条路线被执行了,因为'seasonal / 25'是您的userId 。 第二条路线从没看到过。

交换它们,如果可选项不匹配,Node.js将检查下一个中间件。

app.get(/api/stats/seasonal/:userId/, (req, res)..........)
app.get(/api/stats/:userId/, (req, res)..........)