Node.js 调用res.redirect后使用return或next

Node.js 调用res.redirect后使用return或next,node.js,express,middleware,Node.js,Express,Middleware,我正试图编写一个代码,用于将我所有的Http请求重定向到Https,现在我想问一下,我在许多不同的网站上看到了下面的代码,但其中一些网站使用return和res.redirect,一些在res.redirect之后使用return,有些不使用任何东西,有些只使用next()afterres.redirect 我只想问一下return或在这里调用next()有什么用。还是我在这里遗漏了什么 app.use(function(req,res,next) { if(req.headers["x

我正试图编写一个代码,用于将我所有的
Http
请求重定向到
Https
,现在我想问一下,我在许多不同的网站上看到了下面的代码,但其中一些网站使用
return
res.redirect
,一些在
res.redirect
之后使用
return
,有些不使用任何东西,有些只使用
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
一起使用,它都有相同的用途来停止该特定函数的执行。

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


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

通常,我建议使用:

return res.redirect("https://" + req.headers.host + req.url);
因为在本例中,您显式返回重定向响应


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

一般来说,我建议使用:

return res.redirect("https://" + req.headers.host + req.url);
因为在本例中,您显式返回重定向响应


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

带res.redirect的return呢?同样的事情,需要确认它将与redirect一起退出函数。答案应该是清楚和详尽的。这个答案不是那种。。重定向不返回值。因此,代码中不需要返回值。当函数超出范围时,它将隐式地
返回未定义的
。对于中间件,规则非常简单。您可以响应请求,做一些事情,然后通过调用next()传递控制权。res.redirect返回如何?同样的事情,要确认它将与redirect一起退出函数。答案应该清楚且详尽。这个答案不是那种。。重定向不返回值。因此,代码中不需要返回值。当函数超出范围时,它将隐式地
返回未定义的
。对于中间件,规则非常简单。您可以响应请求,做一些事情,然后通过调用next()传递控制权,因为您使用的是
if/else
您不需要返回。但是许多开发人员总是使用返回来明确代码已经完成,并防止其他代码意外运行。由于您的代码在您的条件之后不做任何事情,因此不需要返回。但是在执行
res.redirect
之后,您可能永远不应该调用
next
,因为您使用的是
if/else
您不需要返回。但是许多开发人员总是使用返回来明确代码已经完成,并防止其他代码意外运行。由于您的代码在您的条件之后不做任何事情,因此不需要返回。但是,在执行
res.redirect
后,您可能永远不应该调用
next
,我不知道为什么,我的应用程序在我的机器上运行得很好,但类似这样的错误在发送到linux服务器中的用户后无法设置状态。我使用
返回res.status(200).重定向('/')
。我的重定向可以吗?或者是什么原因导致了错误?我不知道为什么,我的应用程序在我的机器上运行得很好,但是类似这样的错误
在发送到linux服务器中的用户后无法设置状态。我使用
返回res.status(200).重定向('/')
。我的重定向可以吗?或者是什么原因导致了错误?