curl,node:将JSON数据发布到节点服务器

时间:2015-03-10 01:49:30

标签: node.js curl

我正在尝试测试我用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

我不确定为什么会失败。

1 个答案:

答案 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');