在Express.js中使用相同的响应对象发送多个响应。

20

我有一个长时间运行的进程,需要在多个阶段发送数据。是否有某种方法可以使用express.js发送多个响应?

res.send(200, 'hello')
res.send(200, 'world')
res.end() 

但是当我运行curl -X POST localhost:3001/helloworld时,我只得到了hello

我该如何发送多个响应,或者这在express中不可能实现?


请参考以下答案:https://stackoverflow.com/a/25209269/51593。'你只能对一个HTTP请求发送一个HTTP响应。' - undefined
4个回答

33
使用res.write()res.send()已经调用了res.end(),这意味着在调用res.send()后你不能再向res中写入内容(也就是你的res.end()调用是无效的)。
编辑:这是一个Node.js的内部函数。请参见此处的文档。

1
@aydow res.write() 是 Node.js 的一个函数,在这里查看文档 - yachaka
为什么我不能在 express 中多次使用 res.json() 而不是 res.write()?因为我想要在同一个 API 请求中以 JSON 格式发送多个响应。 - A K
如何在前端处理多个响应。 - aakash4dev
1
@aydow res.write() 没有过时。我建议你删除你的评论,以免误导他人。 - ggorlen
@aakash4dev 我有一个关于从客户端流式传输服务器发送事件的示例,可以在如何在express.js中使用服务器发送事件中找到。 - ggorlen
显示剩余6条评论

8
你只能为一个HTTP请求发送一个HTTP响应。但是,你可以在响应中写入任何类型的数据。这可以是换行符分隔的JSON、多部分部分或任何其他格式。如果你想从服务器流式传输事件到浏览器,一个简单的替代方案可能是使用类似于服务器推送事件polyfill)的东西。

我认为这应该是被接受的答案。正如你所说,主要的观点是“你只能对一个HTTP请求发送一个HTTP响应。”我认为提问者是在询问类似流式传输的东西,而不是在调用send()之前重复调用write()的能力。 - undefined

2
尝试这个,这应该解决你的问题。
app.get('/', function (req, res) {

  var i = 1,
    max = 5;

  //set the appropriate HTTP header
  res.setHeader('Content-Type', 'text/html');

  //send multiple responses to the client
  for (; i <= max; i++) {
    res.write('<h1>This is the response #: ' + i + '</h1>');
  }

  //end the response process
  res.end();
});

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接