我已经阅读了这个问题及其答案(我的节点服务器是否需要在函数结束前手动结束响应?),认为它没有回答我的问题。
我正在使用express并使用以下代码将结果发送到客户端(使用RESTful API):
res.status(400);
res.write('Verification failed.');
res.end(); // why express cannot add it for me, so that I do NOT need to repeat this line
我有一个C++/Java/C#的背景。在这些语言中,有一个原则是关闭方法应该由打开它的人调用,例如流、文件、指针等。这是不可能的,还是有其他问题?
编辑:
- 让注释更清楚地表明代码实际上是有效的,我只是不想重复res.end()
- 我知道
res.send()
是一条捷径。问题是为什么我要关心write
和send
之间的区别,而中间件不会为我处理它。例如,在Spring MVC中,你不需要自己处理end
或close
的HttpResponse
在express中,您可以将以下操作作为快捷方式:
res.send(400, 'Verification failed.');
虽然我不知道为什么你的代码不适合你。
因为当您使用流/套接字时,中间件不知道何时结束响应。这就是你使用的原因
res.send
或致电
res.end
流写入完成后。
您可以编写一个中间件来完成这项工作,该中间件将被放置在中间件/路由堆栈的末尾,但您仍然需要编写next();
才能执行。
至少您可以将write()
和end()
与end('Verification failed');
结合到节点核心中的一个步骤中(Express添加了send()
,如前所述)。