Nodeschool的Stream-Adventure#7 HTTP服务器

时间:2015-03-10 14:37:22

标签: node.js streaming

我在Nodeschool的流冒险练习#7 - Http服务器上做错了。这是一个练习说明gist

这是我到目前为止所做的代码:

var http = require('http');
var through = require('through2');

var server = http.createServer(function (req, res) {
    if (req.method != 'POST') 
        return;

    var stream = through(function write(buffer, encoding, next) {
           this.push(buffer.toString().toUpperCase());
           next();
       });

    req.pipe(stream).pipe(res);
});
server.listen(process.argv[2]);

我得到了一个"不成功的3个成功的退出代码"验证错误。所以我虽然有些事情:

  • 也许我需要res.end() - >没有工作,没有通过其他测试
  • 也许我需要this.queue而不是this.push(),next(),正如execice所示。没有工作:对象没有队列方法。
  • 也许我需要res中的状态代码,所以我把它放在:res.writeHead(200, { 'Content-Type': 'text/plain' });。相同的消息:"不行,3个成功的退出代码"
  • 我尝试了代码here。具有类似的结果(队列方法不可用)。
  • 我甚至用learnyounode http uppercaserer exercice尝试过它,结果是一样的。

现在,我已经看到here几年前这个练习存在问题。这是真的吗? 如果是的话,有人能给我一个关于我做错的提示吗?

感谢。

1 个答案:

答案 0 :(得分:0)

今天睡觉后,头脑清醒,我试着再次掌握测试用例。所以我在

中看到了
ps.once('exit', function (code) { 
    t.equal(Number(code), 0, 'successful exit code'); 
});

它期望成功返回(0)。我把console.log(code)放进去了,它出来了143(SIGTERMed流程)。这是因为第48行(ps.kill)杀死了 这个过程。所以我将测试代码从预期的0改为143.并且它成功了。但即使看到它成功,我仍然没有看到解决方案。我想 使原始测试代码工作。所以我谷歌了一下,发现了这个:

process.on('SIGTERM', function() {
    process.exit();
});

当我把它放在代码中时它最终起作用了。现在我终于检查了解决方案和参考解决方案DIDN&T; T工作。正如我对问题的描述所期望的那样。 无论如何,我已经完成了它,并且学到的东西远远超过了我应该通过本课学到的东西。希望这有助于某人。

修改

当我尝试为此(link)打开问题报告时,我意识到已经有关于此主题的报告(link)。真正的问题是我试图使用旧版本的Node(0.10.33)进行流式冒险,而这个问题并没有发生在较新的0.12.0中(最新的,因为我写这个)。