Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用res.write流式传输响应时出现错误,无法在将头发送到客户端后设置头_Node.js_Express_Http_Nodejs Stream - Fatal编程技术网

Node.js 使用res.write流式传输响应时出现错误,无法在将头发送到客户端后设置头

Node.js 使用res.write流式传输响应时出现错误,无法在将头发送到客户端后设置头,node.js,express,http,nodejs-stream,Node.js,Express,Http,Nodejs Stream,我正在尝试使用res.write方法从express流式传输响应。下面是我的代码,当我点击服务器时,我收到“发送到客户端后无法设置头”错误。我正在尝试对数组的每个条目进行流式处理。有人能帮忙吗 var express = require('express'); var router = express.Router(); /* GET users listing. */ router.get('/', function(req, res, next) { const arr = new A

我正在尝试使用res.write方法从express流式传输响应。下面是我的代码,当我点击服务器时,我收到“发送到客户端后无法设置头”错误。我正在尝试对数组的每个条目进行流式处理。有人能帮忙吗

var express = require('express');
var router = express.Router();

/* GET users listing. */
router.get('/', function(req, res, next) {
  const arr = new Array(1, 2, 3, 4, 5);
  res.writeHead(200, {
    'Content-Type': 'text/plain'
  });

  for(const num of arr) {
    res.write(num);
  }

  res.end('Done!!')
});

module.exports = router;
根据,
res.write()
需要字符串或缓冲区,而不是数字

而且,如果不是字符串或缓冲区,它看起来会抛出异常

  if (!fromEnd && typeof chunk !== 'string' && !(chunk instanceof Buffer)) {
    throw new ERR_INVALID_ARG_TYPE('first argument',
                                   ['string', 'Buffer'], chunk);
  }
我不清楚为什么这个错误本身会导致您报告的特定错误,但为了正常工作,它肯定需要修复

也许路由器正在捕获异常并试图设置500状态?我不知道那件事。无论如何,很高兴这解决了问题


在进一步查看Express代码时,看起来确实有一个
try/catch
围绕在请求处理程序周围:


这会试图将上述异常转化为错误响应,但如果标题已经刷新,而您调用
res.write()
时可能已经刷新了标题,那么这将导致您遇到的有关已发送标题的错误。

此代码本身似乎不太可能显示您报告的错误。我认为在创建这个特定的错误时一定会涉及到其他一些代码。我注意到它需要一个字符串或缓冲区,而不是一个数字,但这可能不是您所问的错误的原因。天哪!!将int转换为String之后,它就开始工作了@拉蒂什-我在回答中添加了更多内容,我想我可以解释为什么这会导致您看到的错误。太好了!!这就是正在发生的事情。我注释掉了错误处理程序中的代码,它将响应代码设置为500,错误消失了。谢谢你,伙计!
Layer.prototype.handle_request = function handle(req, res, next) {
  var fn = this.handle;

  if (fn.length > 3) {
    // not a standard request handler
    return next();
  }

  try {
    fn(req, res, next);
  } catch (err) {
    next(err);
  }
};