2012-07-10 153 views
2

我正在使用Nodejs & Express的示例工作。尝试它时,我得到一个错误。使用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) 

我检查我的文件与编辑器设置为显示特殊字符,有如图中的错误信息没有换行符。

有人能告诉我这里发生了什么事。

谢谢你,吉姆

+0

这个问题已经被添加到书中所讨论的勘误:http://oreilly.com/catalog/errataunconfirmed.csp?isbn=0636920015956 – sillypog 2012-10-31 06:45:37

回答

4

你在你的反应,这被编码成由快递实际的JSON字符串发送对象。显然,Express在JSON字符串的格式中添加了一些缩进,这非常有效。您的断言测试JSON字符串与定义原始对象的实际JavaScript源代码完全相同;这是不是可以永远通过保证任何 JSON编码器,如快递只看到你的对象,但不能看到它产生在代码中存在或不存在无意义的空白的代码。在你的测试中,你实际上应该将JSON解码为一个本地对象,然后将结果对象与包含你期望状态的另一个对象进行深层比较。另一种选择是实际发送字符串而不是响应中的对象;通过这种方式,您可以控制响应的确切字符串表示形式,而不依赖于外部JSON编码。这是非常灵活的,在测试方面没有任何收获。

+0

感谢您的解释。我很好奇,因为这个例子出自一本书,Google搜索没有发现任何其他人有同样的问题。我以为我会以某种方式疯狂起来。 – Cleanman2 2012-07-11 13:01:40