Fastify中return语句与rep.send()是否等效?代码执行疑问
关于Express里res.send()和return的区别,以及你的代码疑问
先给你说清楚:res.send()本身不会让代码停止运行,要是不写return,后面的代码该执行还是会执行。
看你这段代码:
if (!transaction) { res.code(204).send({ message: 'No previously used bank found' }) } res.code(200).send(transaction)
当transaction不存在的时候(也就是!transaction为真),第一个res.send()会执行,但因为没加return,代码会接着往下跑,执行到下面的res.code(200).send(transaction)。这时候就会出问题——HTTP协议规定一个请求只能返回一个响应,Express会直接抛出“不能重复发送响应”的错误。
所以正确的做法是在第一个res.send()前面加上return,这样执行到这里就会直接终止当前函数,不会再跑后面的代码:
if (!transaction) { return res.code(204).send({ message: 'No previously used bank found' }) } res.code(200).send(transaction)
最后总结两点:
- 只调用
res.send()不会停住代码,后续代码继续执行很可能导致重复响应的错误 - 加
return是为了立刻终止函数,避免后面的代码再去操作同一个响应对象
内容的提问来源于stack exchange,提问作者Dally
相关产品推荐
相关产品推荐

