为什么Express没有在nodejs中为我调用response.end()



我已经阅读了这个问题及其答案(我的节点服务器是否需要在函数结束前手动结束响应?),认为它没有回答我的问题。

我正在使用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#的背景。在这些语言中,有一个原则是关闭方法应该由打开它的人调用,例如流、文件、指针等。这是不可能的,还是有其他问题?

编辑:

  1. 让注释更清楚地表明代码实际上是有效的,我只是不想重复res.end()
  2. 我知道res.send()是一条捷径。问题是为什么我要关心writesend之间的区别,而中间件不会为我处理它。例如,在Spring MVC中,你不需要自己处理endcloseHttpResponse

在express中,您可以将以下操作作为快捷方式:

res.send(400, 'Verification failed.');

虽然我不知道为什么你的代码不适合你。

因为当您使用流/套接字时,中间件不知道何时结束响应。这就是你使用的原因

res.send

或致电

res.end

流写入完成后。

您可以编写一个中间件来完成这项工作,该中间件将被放置在中间件/路由堆栈的末尾,但您仍然需要编写next();才能执行。

至少您可以将write()end()end('Verification failed');结合到节点核心中的一个步骤中(Express添加了send(),如前所述)。

最新更新