我想在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);
};
});
答案 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)..........)