如何使用快递js获得发布请求?

时间:2014-01-08 18:43:50

标签: node.js http post express

我正在尝试在我编写的一个小服务中获取post变量,但似乎无法从app.post方法中的请求变量中获取它。我相信这是我正在处理请求的某种方式。我必须采取额外的步骤来处理请求吗?我也尝试过使用express.bodyParser()但我得到一个错误,说这是不推荐使用的。以下是我的小node.js文件:

        var express = require('express');
        var app = express();
        app.use(express.json());
        // posting method : curl -X POST http://localhost:8080/post-page -d name=ArrowKneeous
        // to look at the req I found it better to start using: 
        // nohup node testPost.js > output.log &
        app.post('/post-page',function(req,res){
        var name= req.body.name;
        //undefined
        console.log('name is :' + name);
        //object
         console.log('req is: '+req);
        //object
        console.log('req.body is: ' +req.body);
        //undefined
        console.log('req.body.name is: '+req.body.name);
        //undefined
         console.log('req.params[0]: '+req.params[0]);
         //undefined
         console.log('req.query.name is: '+req.query.name);
         //empty brackets
         console.dir(req.body);
         //huge
         console.dir(req);
         //got stuff is replied to the curl command
         res.send('got stuff');
       });
    app.listen(8080);

1 个答案:

答案 0 :(得分:3)

你有

  

app.use(express.json());

处理JSON帖子,但正在POST标准URL编码表单数据。

  

-d name = ArrowKneeous

您需要发布JSON

-d '{"name": "ArrowKneeous"}' -H "Content-Type: application/json"

或者您需要告诉express也接受URL编码的POST数据。

app.use(express.urlencoded());

修改

这适用于Express 3.x。它与4.x几乎相同,但您需要加载body-parser模块:

var bodyParser = require('body-parser');

app.use(bodyParser.json());
// OR
app.use(bodyParser.urlencoded());