Node.js: Как передать параметры в POST? - PullRequest
3 голосов
/ 14 августа 2011

У меня есть экспресс-приложение и POST-маршрут:

app.post('/test', function(req, res){

 //res.send(req.body.title + req.body.body)
 console.log(req.params);
 console.log(req.body);
 console.log(req.body.user);
 console.log(req.body.feedback);
 console.log("ok");
 //return;
});

Я пытаюсь сделать ~ $ curl -X POST "http://xxxx.herokuapp.com/test?user=hello" и получаю:

TypeError: Cannot read property 'user' of undefined
    at Router.<anonymous> (/app/app.js:40:22)
    at done (/app/node_modules/express/lib/router/index.js:250:22)
    at middleware (/app/node_modules/express/lib/router/index.js:244:9)
    at param (/app/node_modules/express/lib/router/index.js:227:11)
    at pass (/app/node_modules/express/lib/router/index.js:232:6)
    at Router._dispatch (/app/node_modules/express/lib/router/index.js:255:4)
    at Object.handle (/app/node_modules/express/lib/router/index.js:45:10)
    at next (/app/node_modules/express/node_modules/connect/lib/http.js:198:15)
    at Object.methodOverride [as handle] (/app/node_modules/express/node_modules/connect/lib/middleware/methodOverride.js:35:5)
    at next (/app/node_modules/express/node_modules/connect/lib/http.js:198:15)~ $ 

Разве этот пост не должен работать?

Спасибо

Ответы [ 4 ]

4 голосов
/ 14 августа 2011

Выбранный ответ неверен.Очень ясно, что вы хотели что-то из тела запроса (учитывая, что вы говорите POST), а не строку запроса.Вы должны убедиться, что анализатор тела находится в вашем стеке промежуточного программного обеспечения:

app.use(express.bodyParser());

Как только вы это сделаете, вы можете использовать req.body.

(Более того, как уже упоминали другие, ваш curl также неверен. Вы помещаете что-то в строку запроса вместо тела запроса.)

4 голосов
/ 14 августа 2011

Нет, передаваемый параметр находится не в теле сообщения, а в строке запроса.

Согласно документам , для доступа к нему необходимо сделать:

req.query.user
1 голос
/ 14 августа 2011

Нет, вызов curl неправильный. Попробуйте

curl -X POST "http://xxxx.herokuapp.com/test" -d user=hello
1 голос
/ 14 августа 2011

Нет, это не сработает, потому что вы добавляете аргументы в URL (это то, что вы бы сделали для GET).Для публикации необходимо:

curl -d "user=hello" http://xxxx.herokuapp.com/test
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...