2016-09-19 3 views
1

У меня есть экспресс-приложение, которое предназначено для простого успокоения api. это мой app.js файл добавив тело парсер промежуточного программногоexpress Неожиданный токен k

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

использованием bodyparser 1.15.2

это мой основной файл маршрутизации

... 
r.post('/search/:keyword', function(req, res){ 
var __keyword = req.params.keyword, 
console.log(req.body); 

Я использую для почтальона отправка запросов, когда я использую вкладку raw для отправки запроса с помощью приложения /json, результат получается в порядке. Код этого способ отправки запросов генерирует выглядит следующим образом

POST /api/search/mykeyword HTTP/1.1 
Host: localhost:8080 
Content-Type: application/json 
Cache-Control: no-cache 
{ 
    "key": "value" 
} 

при использовании рентгеновских форм-urlencoded варианта в почтальона я получаю эту ошибку

SyntaxError: Unexpected token k 
    at parse (D:<projectpath>\node_modules\body-parser\lib\types\json.js:83:15) 
    at D:<projectpath>\node_modules\body-parser\lib\read.js:116:18 
    at invokeCallback (D:<projectpath>\node_modules\body-parser\node_modules\raw-body\index.js:262:16) 
    at done (D:<projectpath>\node_modules\body-parser\node_modules\raw-body\index.js:251:7) 
    at IncomingMessage.onEnd (D:<projectpath>\node_modules\body-parser\node_modules\raw-body\index.js:307:7) 
    at emitNone (events.js:67:13) 
    at IncomingMessage.emit (events.js:166:7) 
    at endReadableNT (_stream_readable.js:913:12) 
    at nextTickCallbackWith2Args (node.js:442:9) 
    at process._tickCallback (node.js:356:17) 

запрос будет выглядеть следующим образом

POST /api/search/mykeyword HTTP/1.1 
Host: localhost:8080 
Content-Type: application/json 
Cache-Control: no-cache 

{ 
    "key": "value" 
} 

Для меня это выглядит точно так же, но это порождает эту ошибку? Это ошибка в bodyparser, express или postman? Или это моя ошибка? Когда только называя

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

req.body объект всегда пуст, независимо от того, какой из описанных способов, которые я использую

+0

Я думаю, что вы устанавливаете тип тела как 'х-WWW-форм-urlencoded' и Content-типа, как' приложения/json'. Можете ли вы изменить Content-Type на 'application/x-www-form-urlencoded' в заголовках и проверить? –

ответ

0

при использовании сырой Body, выберите JSON (application/json) вместо Text и req.body будет заселен

вы также можете удалить app.use(bodyParser.urlencoded({extended: true}));

, если вы хотите использовать application/x-www-form-urlencoded, проверьте, если Почтальон не имеет application/json внутри вкладки Заголовки

иначе bodyParser выдает эту ошибку

https://github.com/expressjs/body-parser/commit/06a5182e6b1e51eb6723531b36d4ec173ec41268#diff-2f6af76c010570bda08534da011fac9fR83

Смежные вопросы