我正在尝试测试我用CURL编写的小型节点服务器,由于某种原因,这会失败。我的脚本看起来像这样:
http.createServer(function (req, res)
{
"use strict";
res.writeHead(200, { 'Content-Type': 'text/plain' });
var queryObject = url.parse(req.url, true).query;
if (queryObject) {
if (queryObject.launch === "yes") {
launch();
else {
// what came through?
console.log(req.body);
}
}
}).listen(getPort(), '0.0.0.0');
当我将浏览器指向:
http://localhost:3000/foo.js?launch=yes
工作正常。我希望通过JSON发送一些数据,所以我添加了一个部分,看看我是否可以读取请求的正文部分('else'块)。但是,当我在Curl中执行此操作时,我得到'undefined':
curl.exe -i -X POST -H“Content-Type:application / json”-d'{“username”:“xyz”,“password”:“xyz”}'http://localhost:3000/foo.js?moo=yes
我不确定为什么会失败。
答案 0 :(得分:1)
问题在于您将两个请求视为GET请求的对象。
在这个例子中,我为每个方法使用不同的逻辑。考虑req对象充当ReadStream。
var http = require('http'),
url = require('url');
http.createServer(function (req, res) {
"use strict";
if (req.method == 'POST') {
console.log("POST");
var body = '';
req.on('data', function (data) {
body += data;
console.log("Partial body: " + body);
});
req.on('end', function () {
console.log("Body: " + body);
});
res.writeHead(200, {'Content-Type': 'text/html'});
res.end('post received');
} else {
var queryObject = url.parse(req.url, true).query;
console.log("GET");
res.writeHead(200, {'Content-Type': 'text/plain'});
if (queryObject.launch === "yes") {
res.end("LAUNCHED");
} else {
res.end("NOT LAUNCHED");
}
}
res.writeHead(200, { 'Content-Type': 'text/plain' });
}).listen(3000, '0.0.0.0');