Node.js:在第一个连接回调中进行连接和“ writeHead”

应该

在连接的第一个回调中调用“ res.writeHead(...)”时,总是收到错误消息:错误:发送标头后无法设置标头。

var http = require('http');
var connect = require('connect');

var simpleApp = connect();

simpleApp
    .use(function(req, res, next){

        res.writeHead(200, { 'content-type': 'text/html' });
        res.write('response powered by SIMPLE connect-object as middelware');

        console.log('Pre');
        next();
        console.log('Post');
    })
    .use(function(req, res, next){
        console.log('I am the header guy!');
        next();
    })
    .use('/admin', function(req, res, next){
        console.log('someone entered the admin area....');
        next();
    })
    .use(function(req, res){
        console.log('reached the tail of the "chain of responsibility!!!');
        res.end();
    });

http.createServer(simpleApp).listen(process.env.PORT || 3000);

console.log('Running on port "' + (process.env.PORT || 3000) + '"');

// just a save-guard to stop the process after some time...
setTimeout(function(){
    process.exit(0);
}, 20000);

这是错误消息:

Error: Can't set headers after they are sent.
    at ServerResponse.OutgoingMessage.setHeader (http.js:691:11)
    at ServerResponse.res.setHeader (C:\Users\drt\SkyDrive\Programmierung\nodejs\silkveil\node_modules\connect\lib\patch.js:63:22)
    at next (C:\Users\drt\SkyDrive\Programmierung\nodejs\silkveil\node_modules\connect\lib\proto.js:156:13)
    at Object.handle (C:\Users\drt\SkyDrive\Programmierung\nodejs\silkveil\connectSampleApp.js:13:3)
    at next (C:\Users\drt\SkyDrive\Programmierung\nodejs\silkveil\node_modules\connect\lib\proto.js:193:15)
    at Function.app.handle (C:\Users\drt\SkyDrive\Programmierung\nodejs\silkveil\node_modules\connect\lib\proto.js:201:3)
    at Server.app (C:\Users\drt\SkyDrive\Programmierung\nodejs\silkveil\node_modules\connect\lib\connect.js:65:37)
    at Server.EventEmitter.emit (events.js:98:17)
    at HTTPParser.parser.onIncoming (http.js:2108:12)

当我将“ writeHead”代码移到最后一个回调中时,一切都很好:

.use(function(req, res){
        console.log('reached the tail of the "chain of responsibility!!!');
        res.writeHead(200, { 'content-type': 'text/html' });
        res.write('response powered by SIMPLE connect-object as middelware');
        res.end();
    });

所以我的问题是:使用connect时,是否只允许在最后一个回调中使用writeHead / write?

Changgeng

检查另一个问题。res.writeHead基本上,在res.writeHead调用之后,无法再修改标头,而next方法会尝试修改标头,这将导致异常。

因此,您可以在第一个connect回调中修改标头,但不允许编写body(res.write)。以下代码应正确工作。简而言之,您可以修改标题,但不能刷新它们。

var http = require('http');
var connect = require('connect');

var simpleApp = connect();

simpleApp
    .use(function(req, res, next){
        res.statusCode = 200;
        res.setHeader( 'content-type', 'text/html' );

        console.log('Pre');
        next();
        console.log('Post');
    })
    .use(function(req, res, next){
        console.log('I am the header guy!');
        next();
    })
    .use('/admin', function(req, res, next){
        console.log('someone entered the admin area....');
        next();
    })
    .use(function(req, res){
        res.write('response powered by SIMPLE connect-object as middelware');
        console.log('reached the tail of the "chain of responsibility!!!');
        res.end();
    });

http.createServer(simpleApp).listen(process.env.PORT || 3000);

console.log('Running on port "' + (process.env.PORT || 3000) + '"');

// just a save-guard to stop the process after some time...
setTimeout(function(){
    process.exit(0);
}, 20000);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Node.js:在第一个连接回调中连接并“ writeHead”

来自分类Dev

Node.js-writeHead设置“位置”和“ Set-Cookie”

来自分类Dev

http模块上的node.js response.writeHead

来自分类Dev

http模块上的node.js response.writeHead

来自分类Dev

nodejs +连接-writeHead不起作用

来自分类Dev

所有文件均以myme text / html发送,而忽略服务器node.js上的标头功能writeHead

来自分类Dev

所有文件均以myme text / html发送,而忽略服务器node.js上的标头功能writeHead

来自分类Dev

response.setHeader和response.writeHead之间的区别?

来自分类Dev

response.status和response.writeHead之间的区别?

来自分类Dev

HTTP文件服务器和.writeHead方法

来自分类Dev

Node.js如何知道回调的第一个参数是否是错误处理程序?

来自分类Dev

res.writehead 和 res.write 的 hapi 等价物是什么?

来自分类Dev

在高负载下,连接到socket.io的客户端可能会丢失带有node.js的第一个数据包

来自分类常见问题

错误:无法验证Node.js中的第一个证书

来自分类Dev

如何发布我的第一个Node.js应用程序?

来自分类Dev

node.js mongodb仅更新数组中第一个找到的子文档

来自分类Dev

Node.js async.each等待第一个循环

来自分类Dev

无法验证Node.js中的第一个证书

来自分类Dev

从文档顺序中获取第一个Firestore文档(Node.js)

来自分类Dev

无法运行我的第一个node.js程序?

来自分类Dev

Node.js async.each等待第一个循环

来自分类Dev

编写一个json对象以在node.js中进行缓冲

来自分类Dev

Node.js异步循环,下一个循环之前从函数进行回调

来自分类Dev

Node.js异步循环,下一个循环之前从函数进行回调

来自分类Dev

如果省略 response.writeHead() 会怎样

来自分类Dev

尝试创建我的第一个node.js应用程序:/ bin / sh:1:fpm:找不到

来自分类Dev

Node.js:第一个字符在fs.createReadStream中未定义

来自分类Dev

如何解决 Node Js 后端仅执行第一个控制器的问题?

来自分类Dev

连接Node.js和Cloud MQTT

Related 相关文章

  1. 1

    Node.js:在第一个连接回调中连接并“ writeHead”

  2. 2

    Node.js-writeHead设置“位置”和“ Set-Cookie”

  3. 3

    http模块上的node.js response.writeHead

  4. 4

    http模块上的node.js response.writeHead

  5. 5

    nodejs +连接-writeHead不起作用

  6. 6

    所有文件均以myme text / html发送,而忽略服务器node.js上的标头功能writeHead

  7. 7

    所有文件均以myme text / html发送,而忽略服务器node.js上的标头功能writeHead

  8. 8

    response.setHeader和response.writeHead之间的区别?

  9. 9

    response.status和response.writeHead之间的区别?

  10. 10

    HTTP文件服务器和.writeHead方法

  11. 11

    Node.js如何知道回调的第一个参数是否是错误处理程序?

  12. 12

    res.writehead 和 res.write 的 hapi 等价物是什么?

  13. 13

    在高负载下,连接到socket.io的客户端可能会丢失带有node.js的第一个数据包

  14. 14

    错误:无法验证Node.js中的第一个证书

  15. 15

    如何发布我的第一个Node.js应用程序?

  16. 16

    node.js mongodb仅更新数组中第一个找到的子文档

  17. 17

    Node.js async.each等待第一个循环

  18. 18

    无法验证Node.js中的第一个证书

  19. 19

    从文档顺序中获取第一个Firestore文档(Node.js)

  20. 20

    无法运行我的第一个node.js程序?

  21. 21

    Node.js async.each等待第一个循环

  22. 22

    编写一个json对象以在node.js中进行缓冲

  23. 23

    Node.js异步循环,下一个循环之前从函数进行回调

  24. 24

    Node.js异步循环,下一个循环之前从函数进行回调

  25. 25

    如果省略 response.writeHead() 会怎样

  26. 26

    尝试创建我的第一个node.js应用程序:/ bin / sh:1:fpm:找不到

  27. 27

    Node.js:第一个字符在fs.createReadStream中未定义

  28. 28

    如何解决 Node Js 后端仅执行第一个控制器的问题?

  29. 29

    连接Node.js和Cloud MQTT

热门标签

归档