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).重定向('/')
。我的重定向可以吗?或者是什么原因导致了错误?