我正在使用 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)
我使用设置为显示特殊字符的编辑器检查了我的文件,并且没有换行符,如错误消息所示。
有人可以告诉我这里发生了什么吗?
谢谢吉姆
最佳答案
您在响应中发送一个对象,该对象由 Express 编码为实际的 JSON 字符串。显然 Express 在 JSON 字符串的格式中添加了一些缩进,这是完全有效的。您的断言测试 JSON 字符串是否与定义原始对象的实际 Javascript 源代码完全相同;这不是任何 JSON 编码器都可以保证的,因为 Express 只能看到您的对象,但永远看不到生成它的代码以及是否存在无意义的对象该代码中的空格。在测试中,您实际上应该将 JSON 解码为 native 对象,并将结果对象与包含预期状态的另一个对象进行深度比较。另一种选择是实际发送字符串而不是响应中的对象;这样您就可以控制响应的确切字符串表示形式,而不依赖于外部 JSON 编码。这非常不灵活,并且在测试方面对您没有任何好处。
关于javascript - 使用nodejs/express 出现意外的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11421974/