【问题标题】:Unexpected newline characters using nodejs/express使用 nodejs/express 出现意外的换行符
【发布时间】:2012-10-31 14:45:37
【问题描述】:

我正在研究一个使用 Nodejs 和 Express 的示例。尝试时出现错误。

主文件的一部分:

    app.post('/send', express.bodyParser(), function(req, res) {
    if(req.body && req.body.tweet) {
        tweets.push(req.body.tweet);
        res.send({status:"ok",message:"Tweet received"});
    } else {
        res.send({status: "nok", message: "No tweet received"});    
    }

});

部分测试脚本:

    var req = http.request(opts, function(res) {
res.setEncoding('utf8');

var data = "";
res.on('data', function(d) {
    data += d;  
});
res.on('end', function() {
    assert.strictEqual(data, '{"status":"ok","message":"Tweet received"}');
});

});

这是错误:

assert.js:104
  throw new assert.AssertionError({
        ^
AssertionError: "{\n  \"status\": \"ok\",\n  \"message\": \"Tweet received\"\n}" === "{\"status\":\"ok\",\"message\":\"Tweet received\"}"
    at IncomingMessage.<anonymous> (/home/jfb/Documents/Info/Nodejs/Up_and_Running/test.js:19:11)
    at IncomingMessage.EventEmitter.emit (events.js:115:20)
    at IncomingMessage._emitEnd (http.js:366:10)
    at HTTPParser.parserOnMessageComplete [as onMessageComplete] (http.js:149:23)
    at Socket.socketOnData [as ondata] (http.js:1356:20)
    at TCP.onread (net.js:404:27)

我使用设置为显示特殊字符的编辑器检查了我的文件,并且没有如错误消息所示的换行符。

谁能告诉我这里发生了什么。

谢谢,吉姆

【问题讨论】:

标签: javascript node.js express


【解决方案1】:

您在响应中发送了一个对象,该对象被 Express 编码为实际的 JSON 字符串。显然 Express 在 JSON 字符串的格式中添加了一些缩进,这是完全有效的。您的断言测试 JSON 字符串与定义原始对象的实际 Javascript 源代码完全相同;这不是 任何 JSON 编码器可以保证的,因为 Express 只能看到您的对象,但永远看不到生成它的代码以及是否存在无意义的该代码中的空格。在您的测试中,您实际上应该将 JSON 解码为本机对象,并将生成的对象与包含您预期状态的另一个对象进行深度比较。另一种选择是在响应中实际发送 string 而不是对象;通过这种方式,您可以控制响应的确切字符串表示,而无需依赖外部 JSON 编码。这非常不灵活,在测试方面没有任何好处。

【讨论】:

  • 感谢您的解释。我很好奇,因为这个例子来自一本书,谷歌搜索没有发现其他人有同样的问题。我以为我搞砸了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
相关资源
最近更新 更多