Node js + Express 4 анализирует JSON POST-запрос

Возникла проблема с чем-то, что должно быть относительно простым. Я отправляю запрос POST с данными JSON следующим образом:

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

В моем приложении у меня есть маршрут... в разделе "/routes" я установил 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...


person avrono    schedule 18.04.2016    source источник
comment
данные не отправляются правильно .. проверьте сообщение curl еще раз   -  person Nalla Srinivas    schedule 18.04.2016
comment
можете ли вы опубликовать свой код полностью, чтобы мы могли понять, в чем проблема   -  person Nalla Srinivas    schedule 18.04.2016
comment
@Srinivas добавили в описание   -  person avrono    schedule 18.04.2016
comment
Если я отправлю это, это сработает `curl -X POST -d searchbar=cat --url someurl.com/public/search< /а>   -  person avrono    schedule 18.04.2016


Ответы (2)


Имейте данные внутри кавычек следующим образом:

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

В вашем случае это не json, а строка s, поэтому она не определена.

РЕДАКТИРОВАТЬ:

Вместо этого:

router.use(bodyParser.json());

Попробуйте для этого:

router.use(express.bodyParser());
person Subburaj    schedule 18.04.2016
comment
Я пробовал это с ' и с, но это не проблема - person avrono; 18.04.2016
comment
@avrono измените bodyParser.urlencoded({extended: true}) на extended: false - person QoP; 18.04.2016
comment
@Suburaj получил эту ошибку. Ошибка: большинство промежуточного программного обеспечения (например, json) больше не связано с Express и должно быть установлено отдельно. - person avrono; 18.04.2016

Наконец-то я разгадал эту "загадку"

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

Требовались заголовки Accept и Content-Type.

person avrono    schedule 18.04.2016