Node.js 在自定义express函数中返回res和next

Node.js 在自定义express函数中返回res和next,node.js,function,return,Node.js,Function,Return,如何在express函数中同时返回res和next: const customfunction=async(req、res、next)=>{ 试一试{ //如何设置cookie并返回next()? 返回res.cookie('someToken',someToken{ 签名:对, //等等。。。 } ); 返回next(); }捕捉(错误){ //在这里捕获,例如,返回res.status(401).clearCookie。。。 } } 快速请求处理程序(如传递给app.get()或router

如何在express函数中同时返回
res
next

const customfunction=async(req、res、next)=>{
试一试{
//如何设置cookie并返回next()?
返回res.cookie('someToken',someToken{
签名:对,
//等等。。。
}
);
返回next();
}捕捉(错误){
//在这里捕获,例如,返回res.status(401).clearCookie。。。
}
}

快速请求处理程序(如传递给
app.get()
router.post()
或类似程序的内容)不会注意该处理程序的返回值

因此,在这样的处理程序中,
return
仅用于流控制,以停止函数的进一步执行

此外,您的代码有两个返回语句,一个接一个:

return res.cookie(...);
return next();
这是没有意义的,因为代码的
return next()
行永远不会执行,因为函数已经在前面的行上返回了

如果这是中间件,并且您希望其他一些请求处理程序仍有机会处理此请求,那么您将需要以下内容:

const customfunction = async (req, res, next) => {
    res.cookie('someToken', someToken);
    next();
};
似乎没有任何理由使用
try/catch
,因为它们都不应该引发异常(假设代码中没有语法错误)

但是,如果您真的想要
try/catch
,您可以这样做:

const customfunction = async (req, res, next) => {
    try {
        res.cookie('someToken', someToken);
        next();
    } catch(e) {
        // make sure logs can see that this unexpected error is happening
        console.log("customFunction error", e);
        res.clearCookie('someToken');
        res.status(500).send("Internal Error");   // probably want a more glamorous error page
    }
};

您不需要,实际上也不需要返回
res.cookie
next