2015-04-20 7 views
2

Я только что установил последние версии модулей. Я не могу получить переменные GET или POST. Что я делаю неправильно? NODE: v0.12.2Экспресс js - тело запроса пусто

var express  =   require("express"); 
var bodyParser  =   require("body-parser"); 
var app   =   express(); 
app.use(bodyParser.urlencoded({ extended: false })) 

// parse application/json 
app.use(bodyParser.json()) 

app.use(function (req, res) { 
    res.setHeader('Content-Type', 'text/plain') 
    res.write('you posted:\n') 
    res.end(JSON.stringify(req.body, null, 2)) 
}); 
app.listen(3000,function(){ 
    console.log("Started on PORT 3000"); 
}) 

http://localhost:3000/?token=devvvvv GET возвращает: вы вывесили: {}

Спасибо за ответы, но проблема с POST не решена ... POST маркер = as123ds на http://localhost:3000/ return пустой массив в req.body Как я могу это решить?

+0

Вы должны использовать ** только один логин ** вместо двух и использовать только вход для редактирования своего вопроса ... – Taifun

ответ

1

Вы должны использовать req.query:

req.query 

Объект, содержащий свойство для каждого запроса параметра строки в маршруте. Если строки запроса нет, это пустой объект, {}.

api link

+1

Это было бы так, если маршрут был настроен так: http: // localhost: 3000 /: токен и доступ к ним так: http: // localhost: 3000/devvvvv – nordhagen

6

Вы передаете параметры через строку запроса и пытается получить доступ к ним через тело запроса, который в данном случае является пустым.

Токен параметр будет доступен в request.query так:

app.use(function (req, res) { 
    res.setHeader('Content-Type', 'text/plain') 
    res.write('you posted:\n') 
    res.end(JSON.stringify(req.query.token, null, 2)) 
}); 

Если вы только планируете представить параметры в строке запроса вы не должны установить тело-парсер промежуточного программного обеспечения на всех.

0

Модуль bodyparser требует, чтобы свойство «Content-type» http-запроса было равно «application/json». Он не будет работать для других значений.

0

Вы должны проверить тип содержимого запроса на клиенте, эта ссылка может помочь

Node (Express) request body empty

Это потому, что bodyParser разбирает приложения/JSON, применение/х-WWW-форм-кодированный и multipart/form-data, и он выбирает , какой анализатор следует использовать на основе Content-Type.

+0

Может быть хорошей идеей включить важные детали из этой ссылки в ваш ответ, поскольку ссылки могут со временем сойти с мертвой точки, а смысл вашего ответа может быть полностью потерянным, если/когда это произойдет. – orangething

+0

Благодарим за совет. –

0

Вы разбираете JSON из запроса, поэтому POST от клиента должен иметь 'Content-Type': 'application/json' в заголовке HTTP. Если нет, у вас будет пустой request.body со стороны сервера.

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