app.get - res.send 与 return res.send 之间有啥区别吗
Posted
技术标签:
【中文标题】app.get - res.send 与 return res.send 之间有啥区别吗【英文标题】:app.get - is there any difference between res.send vs return res.sendapp.get - res.send 与 return res.send 之间有什么区别吗 【发布时间】:2017-08-20 16:52:48 【问题描述】:我是 node 和 express 的新手。我已经看到了使用“res.send”和“return res.send”的 app.get 和 app.post 示例。这些是一样的吗?
var express = require('express');
var app = express();
app.get('/', function(req, res)
res.type('text/plain');
res.send('i am a beautiful butterfly');
);
或
var express = require('express');
var app = express();
app.get('/', function(req, res)
res.type('text/plain');
return res.send('i am a beautiful butterfly');
);
【问题讨论】:
文档也不是很有帮助:"Returns: It returns an Object" 【参考方案1】:return
关键字从您的函数返回,从而结束其执行。这意味着它之后的任何代码行都不会被执行。
在某些情况下,您可能想使用res.send
,然后做其他事情。
app.get('/', function(req, res)
res.send('i am a beautiful butterfly');
console.log("this gets executed");
);
app.get('/', function(req, res)
return res.send('i am a beautiful butterfly');
console.log("this does NOT get executed");
);
【讨论】:
是的!我用例子来解释。【参考方案2】:app.get('/', function(req, res)
res.type('text/plain');
if (someTruthyConditinal)
return res.send(':)');
// The execution will never get here
console.log('Some error might be happening :(');
);
app.get('/', function(req, res)
res.type('text/plain');
if (someTruthyConditinal)
res.send(':)');
// The execution will get here
console.log('Some error might be happening :(');
);
【讨论】:
【参考方案3】:我想指出它对我的代码的影响。
我有一个验证令牌的中间件。代码如下:
function authenticateToken(req, res, next)
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1] || null;
if(token === null) return res.sendStatus(401); // MARKED 1
jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, (err, user) =>
if(err) return res.sendStatus(403); // MARKED 2
req.user = user;
next();
);
在// MARKED 1
行上,如果我没有写return,中间件将继续调用next()
并发送状态为200
的响应,而不是预期的行为。
// MARKED 2
也一样
如果您不在这些 if
块内使用 return
,请确保您使用的是调用 next()
的 else
块。
希望这有助于理解这个概念并从一开始就避免错误。
【讨论】:
以上是关于app.get - res.send 与 return res.send 之间有啥区别吗的主要内容,如果未能解决你的问题,请参考以下文章
认识 Express 的 res.send() 和 res.end()
res.send()传参----Invalid status code: 1
Ajax请求回调地狱及解决方案(promiseasync和await)