我设置了一个expressjsapi来服务来自前端的请求,并将其连接到我的redis数据库。一个端点接收请求url(get request)中指定的参数,并返回一个数字。当我使用axios或node fetch访问这个端点时,它返回null,如果键不存在,node redis就会返回null。当我用curl和chrome点击这个端点时,它返回正确的数字。其他端点功能正常。为什么会这样?
服务器代码:
router.get("/api/:id/bal", async (req, res) => {
let id = req.params.id;
await client.get(id, (err, response) => {
if (err) throw err;
res.send(response);
});
});
axios呼叫:
axios.get(`http://localhost:4000/api/${id}/bal`)
.then((response) => {
console.log(response.data);
})
curl 呼叫:
curl http://localhost:4000/api/id/bal -i
(在这两种情况下,id均替换为真实的帐户id)
1条答案
按热度按时间beq87vna1#
不确定这是否有帮助,但是,混合回调和
async/await
不推荐。根据您使用的redis库的不同,可能会有所不同,但我假设您使用的是node-redis
,这在默认情况下不是promisified,因此您必须坚持回调:或者你可以自己承诺redis(你需要node 8+和express 5+):
自从我们使用
async/await
express将捕获并处理错误,而不需要使用回调和next
!现在只需检查日志,如果失败,可以尝试用json发送
res.json(response)
?