0

对应该相对简单的事情有问题。我正在发送一个带有 JSON DATA 的 POST 请求,如下所示:

curl -H "Content-Type : application/json" -X POST -d '{"searchbar":"cat"}' http://someurl.com/public/search

在我的应用程序中,我有一条路线……在“/路线”下,我将 bodyParser 设置如下:

router.use(bodyParser.json());
router.use(bodyParser.urlencoded({ extended: true }));

在路线中我有 var searchbar = req.body.searchbar

但是,变量 searchbar 始终未定义。

我可以看到正文中的数据如下:

{ '{searchbar:cat}': '' }

显然,curl 没有正确发送数据(所以我的 curl 不正确),或者 bodyParser 没有解析数据。任何人都可以帮忙吗?

编辑:路线/index.js

var express = require('express');
var bodyParser = require('body-parser');
var moment = require('moment');
var fs = require('fs');
var router = express.Router();

router.use(bodyParser.json());
router.use(bodyParser.urlencoded({ extended: true }));

router.all('*',function(req,res,next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With");
    res.header("Access-Control-Allow-Methods", "GET, PUT, POST, OPTIONS");
    next();

});


router.post('/public/search/',  function (req, res) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With");
    res.header("Access-Control-Allow-Methods", "GET, PUT, POST, OPTIONS");

    var searchbar = req.body.searchbar;
    console.log("Searchbar is : " + searchbar);
    console.log("body is : " + require('util').inspect(req.body, false, null)); 
    });

modeul.exports = router;

更新:

我使用邮递员(chrome插件)并设法发送和解析数据 - 在这种情况下CURL一定有问题......

4

2 回答 2

0

将数据包含在引号内,如下所示:

curl -H "Content-Type : application/json" -X POST -d '{"searchbar":"cat"}' http://someurl.com/public/search

在您的情况下,它不是 json 它的 s string ,所以它是未定义的。

编辑:

而不是这个:

router.use(bodyParser.json());

试试这个:

router.use(express.bodyParser());
于 2016-04-18T10:20:53.477 回答
0

我终于解开了这个“谜团”

 curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"searchbar":"cats"}'  http://someurl/public/search

需要 Accept 和 Content-Type 标头

于 2016-04-18T15:46:45.440 回答