Javascript res.redirect导致.catch语句出错
我正在使用Node.js,并在承诺的情况下执行了一个数据库调用。我设置了一个“.then/.catch”来处理承诺的结果。那部分似乎都没有任何问题。在我对从数据库返回的数据进行一些处理之后,我正试图“重定向”到“.then”语句中的另一个路由。此重定向似乎导致“.catch”语句出现问题。如果我删除“res.redirect”,我没有错误问题……是否有解决方法?如有任何建议,我们将不胜感激 代码:Javascript res.redirect导致.catch语句出错,javascript,node.js,redirect,promise,Javascript,Node.js,Redirect,Promise,我正在使用Node.js,并在承诺的情况下执行了一个数据库调用。我设置了一个“.then/.catch”来处理承诺的结果。那部分似乎都没有任何问题。在我对从数据库返回的数据进行一些处理之后,我正试图“重定向”到“.then”语句中的另一个路由。此重定向似乎导致“.catch”语句出现问题。如果我删除“res.redirect”,我没有错误问题……是否有解决方法?如有任何建议,我们将不胜感激 代码: 我建议您提供一个可重复使用的承诺,以防您需要在Express应用程序的其他位置找到您的成员列表 c
我建议您提供一个可重复使用的承诺,以防您需要在Express应用程序的其他位置找到您的成员列表
const db = require('./routes/queries');
const findMembers = () => {
return db.getMembers()
.then(members => {
return members
})
.catch(err => {
console.log('Caught an error!', err);
});
}
//inside your express app
app.get("/some_route", (req, res) => {
return findMembers()
.then(members => {
//do something with your members list
res.redirect("/redirect_route")
})
})
嗯,错误信息似乎很清楚。您在哪里定义
res
?我将Node.js与Express一起使用…我在代码中有许多res.redirect语句,并且没有引起任何问题…只有在我的promise resolve语句中有这些语句…“res.redirect”是标准Express功能的一部分。谢谢你的回复。你能在这里显示更多的上下文吗?更具体地说,res来自哪里,它会发生什么?这可能和异步性有关?你在失去视野吗?Idk,就像我说的,我们必须看到完整的上下文才能知道。重定向到另一个路由似乎抛出了“.catch”语句…是否无法在“.then”…”内重定向页面导航?那么我只能假设此代码位于未定义res
的请求处理程序之外res
不是一个神奇的变量。当您定义请求事件处理程序(例如,api.get('/foo',function(req,res){…})
)时,您正在声明它。您负责将其传递到需要的位置。谢谢您的编辑请求。您确定在console.log中看到[Object,Object]的原因是由于承诺问题吗?我认为这是因为您试图将对象作为字符串而不是console.log(成员)来记录
const db = require('./routes/queries');
const findMembers = () => {
return db.getMembers()
.then(members => {
return members
})
.catch(err => {
console.log('Caught an error!', err);
});
}
//inside your express app
app.get("/some_route", (req, res) => {
return findMembers()
.then(members => {
//do something with your members list
res.redirect("/redirect_route")
})
})