【问题标题】:Return res and next in a custom express function在自定义 express 函数中返回 res 和 next
【发布时间】:2020-04-09 08:04:37
【问题描述】:

如何在 express 函数中同时返回 resnext

const customfunction = async (req, res, next) => {
 try {
   // how do I set cookie and return next()?
   return res.cookie('someToken', someToken, {
     signed: true,
     // etc...
     }
   );
  return next();
 } catch (err) {
   // catch here, for example, return res.status(401).clearCookie...
 }
}

【问题讨论】:

  • 您不需要,res.cookienext 实际上都不需要返回。

标签: node.js function return


【解决方案1】:

快速请求处理程序(例如您传递给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
    }
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 2021-12-05
    • 2021-10-17
    • 2021-06-30
    相关资源
    最近更新 更多