Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.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 res.redirect导致.catch语句出错_Javascript_Node.js_Redirect_Promise - Fatal编程技术网

Javascript res.redirect导致.catch语句出错

Javascript res.redirect导致.catch语句出错,javascript,node.js,redirect,promise,Javascript,Node.js,Redirect,Promise,我正在使用Node.js,并在承诺的情况下执行了一个数据库调用。我设置了一个“.then/.catch”来处理承诺的结果。那部分似乎都没有任何问题。在我对从数据库返回的数据进行一些处理之后,我正试图“重定向”到“.then”语句中的另一个路由。此重定向似乎导致“.catch”语句出现问题。如果我删除“res.redirect”,我没有错误问题……是否有解决方法?如有任何建议,我们将不胜感激 代码: 我建议您提供一个可重复使用的承诺,以防您需要在Express应用程序的其他位置找到您的成员列表 c

我正在使用Node.js,并在承诺的情况下执行了一个数据库调用。我设置了一个“.then/.catch”来处理承诺的结果。那部分似乎都没有任何问题。在我对从数据库返回的数据进行一些处理之后,我正试图“重定向”到“.then”语句中的另一个路由。此重定向似乎导致“.catch”语句出现问题。如果我删除“res.redirect”,我没有错误问题……是否有解决方法?如有任何建议,我们将不胜感激

代码:


我建议您提供一个可重复使用的承诺,以防您需要在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")
     })
})