在调用 res.redirect 之后使用 return 或 next

Using return or next after calling res.redirect

我正在尝试编写将我所有 Http 请求重定向到 Https 的代码,现在我想问一下,我在许多不同的网站上看到了以下代码,但其中一些使用 returnres.redirect,有些用 return after res.redirect,有些什么都不用,有些只用 next() after res.redirect.

我就是想问问这里return或者调用next()有什么用。还是我在这里遗漏了什么??

app.use(function(req,res,next) {
    if(req.headers["x-forwarded-proto"] == "http") {
        console.log('Request was HTTP');
        /* return ??*/ res.redirect("https://" + req.headers.host + req.url);
        // return or next() or nothing ??.
    } else {
        console.log('Request was not HTTP');
        return next();
    } 
});

next() 是 Express 中间件的一部分。它告诉执行功能流程图上的下一个中间件功能。如果不使用,则不会执行下一个中间件。

return 仅用于确保在触发回调后执行停止,即回调的任何部分都不会再次处理,无论您将它与 next 还是 redirect 一起使用它具有相同的用于停止执行该特定功能。

总的来说,我推荐使用:

return res.redirect("https://" + req.headers.host + req.url);

由于在这种情况下您明确地 return 重定向响应。

在大多数情况下,只需 res.redirect() 就足够了,并且您确实有重定向响应 (HTTP 302),但是服务器日志中可能会出现错误,尤其是如果您在 async (req, res) => {} 函数中使用它。