res.send和res.write在express中有什么区别?

PG1*_*PG1 31 node.js npm express

我是一个初学者express.js,我试图理解之间的差异res.sendres.write

Oma*_*era 60

res.send

  • res.send仅在Express js中.
  • 为简单的非流式响应执行许多有用的任务.
  • 能够自动分配Content-Length HTTP响应头字段.
  • 能够提供自动HEAD和HTTP缓存新鲜度支持.
  • 实际解释

有关详细信息,请发送电子邮件至expressjs.com/en/api.html


res.write

  • 可以多次调用以提供身体的连续部位.
  • response.write('<html>');
    response.write('<body>');
    response.write('<h1>Hello, World!</h1>');
    response.write('</body>');
    response.write('</html>');
    response.end();
    
    Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请
访问
nodejs.org/docs nodejs.org/en/docs/guides

  • 为了进一步澄清`res.write`,这是节点`http`模块的`OutgoingMessage`类提供的一种方法。Express.js的response类继承了OutgoingMessage类。下面是write方法的定义:```OutgoingMessage.prototype.write = function write(chunk,encoding,callback){return write_(this,chunk,encoding,callback,false); }; ``` (2认同)

Kee*_*rti 7

res.send相当于res.write + res.end 所以关键差异res.send只能被调用一次,因为res.write可以多次调用,然后是a res.end.

但除此之外res.send是Express的一部分.它可以自动检测响应头的长度.但是res.send()可能存在内存峰值的可能性,如果是大文件,我们的应用程序会介于两者之间.


Cha*_*lie 7

任何答案中都没有指出的最重要的区别之一是“排水”。

res.write可以返回true或false。根据文档:

如果整个数据已成功刷新到内核缓冲区,则返回 true。如果所有或部分数据已在用户内存中排队,则返回 false。'drain' 将在缓冲区再次空闲时发出。

因此,在执行 时res.write,调用者应该推迟写入,直到res.write返回 false 时Drain 事件发出。

所有这些都在res.send. 权衡是使用后者时必须进行的缓冲。