2014-10-09 3 views
1

Я пытаюсь реализовать простой сервер с помощью Express 4.0 и разбор сообщений с помощью BodyParser. Для тестирования моего сервера я использую Postman.NodeJs, Express, BodyParse и JSON

Использование x-www-form-urlencoded как режим сообщения, это работает без проблем, но изменение сообщений с помощью JSON Я не могу разделить данные, используя BodyParse.

Вот мой код:

app.use(bodyParser.json()); 

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

var router = express.Router() 

router.get('/', function (req, res){ 

    res.json({message: "nd..."}) 
}) 

var sendRoute = router.route('/msg') 
sendRoute.post(function(req, res){ 

    // HERE IS THE PROBLEM****************************** 
// It works with urlencoded request but not with JSON 
    var dataparam1 = req.body.param1 
    var dataparam2 = req.body.param2 
    **************************************************** 
    . 
    . 
    . 
}) 

и скажем это данные JSON я получаю сформировать запрос:

[{"param1":"This is the param1", 
    "param2":"This is the param2" 
}] 

Что случилось с моим кодом? как я могу получить параметры, отправленные с помощью формата JSON?

+0

Что означает 'console.log (req.headers ['content-type'])' отображается внутри вашего маршрута POST при отправке запроса JSON? – mscdex

+0

Uhm ... 'text/plain; charset = UTF-8' – MatterGoal

+0

В почтальоне я установил raw и JSON. – MatterGoal

ответ

4

Если ваш объект запроса отправлен как строка JSON, вы должны сообщить своему приложению, что заголовок содержимого.

  1. В Почтальон, нажмите кнопку Headers, рядом с раскрывающимся меню для выбора способа и кнопки URL params. (Вверху справа)
  2. Таблица будет расширяться, заполните Content-Type в левом поле и application/json в правом поле.
  3. Отправить заявку.

bodyParser может обрабатывать несколько типов данных, но он должен знать, какой формат вы отправляете. Он не будет пытаться угадать тип данных.

В раскрывающемся меню (в соответствии с вашим комментарием он установлен на «JSON» в данный момент) чуть выше текстового поля, где вы заполняете тело запроса, только переключает подсветку синтаксиса, он не устанавливает заголовок Content-Type для тебя.

+0

Если входящий объект не может быть проанализирован, ваш JSON недействителен. Вероятно, вы не цитируете ключи ('{" key ":" val "}' vs '{key:" val "}'). Они не являются * необязательными в JSON. * Edit: Я вижу, что вы удалили свой комментарий, поэтому я полагаю, что это сработало? : -) * – RikkusRukkus