我这样做tutorial
到目前为止,该教程展示了如何使用Node.js创建一个简单的Web服务器并为其编写一个简单的测试
我遇到的问题似乎相当微不足道。本教程使用的是一个过时的express版本,并使用它,一个过时的body解析器版本。 为了解决这个问题,我在NPM本地安装了body-parser,并将中间件参数设置为post方法,以使用body-parsers urlencoded方法。
Index.js
var express = require('express');
var bodyParser = require('body-parser');
var app = express(),
tweets = [];
app.listen(8000)
var urlencodedParser = bodyParser.urlencoded({extended: true})
app.get('/', function(req, res) {
res.send('Welcome to Node Twitter');
});
app.post('/send', urlencodedParser function(req, res) {
if(req.body && req.body.tweet) {
tweets.push(req.body.tweet);
res.send({status:"ok", message:"Tweet received"});
} else {
//no tweet?
res.send({status:"nok", message:"No tweet received"});
}
})
app.get('/tweets', function(req, res) {
res.send(tweets);
})
和
test.js
var http = require('http'),
assert = require('assert'),
bodyParser;
var opts = {
host: 'localhost',
port: 8000,
path: '/send',
method: 'POST',
headers: {'content-type':'application/x-www-form-urlencoded'}
}
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"}' )
})
})
req.write('tweet=test');
req.end();
然而,当我运行测试时,我得到:
assert.js:89
throw new assert.AssertionError({
^
AssertionError: '{"status":"ok","message":"Tweet received"}' === '{status:"ok",
message:"Tweet received"}'
at IncomingMessage.<anonymous> (C:\workspace\node-demo\test.js:22:16)
at emitNone (events.js:72:20)
at IncomingMessage.emit (events.js:166:7)
at endReadableNT (_stream_readable.js:905:12)
at nextTickCallbackWith2Args (node.js:437:9)
at process._tickCallback (node.js:351:17)
我知道大部分都没用。然而,让我失望的部分是
AssertionError: '{"status":"ok","message":"Tweet received"}' === '{status:"ok",
message:"Tweet received"}'
根据body-parser,如果我设置了&#39;扩展&#39;如果选项为true,我可以访问&#34; ..以便将富对象和数组编码为URL编码格式。&#34;。
我的问题是:为什么我的test.js请求不返回严格相等,即使测试http请求的内容类型为&#39; application / x-www-form-urlencoded&#39; ?
答案 0 :(得分:0)
似乎答案是在严格的断言中围绕我的对象键:
assert.strictEqual(data, '{status:"ok", message:"Tweet received"}' )
到
assert.strictEqual(data, '{"status":"ok","message":"Tweet received"}' )
注意&#34;状态&#34;和&#34;消息&#34;。