Разобрать закодированное тело URL с помощью Restify

Я не могу делать закодированные URL-адреса для моего API-интерфейса node.js, используя restify. У меня есть следующая настройка моего приложения для восстановления:

app.use(restify.acceptParser(app.acceptable));                                  
app.use(restify.queryParser());                                                 
app.use(restify.urlEncodedBodyParser());

Но когда я запрашиваю свое приложение с помощью curl со следующим запросом:

curl -X POST -H "Content-type: application/x-www-form-urlencoded" -d quantity=50 http://app:5000/feeds

На мой взгляд, я получаю следующее тело ввода:

console.log(req.body)  // "quantity=50"

Заранее спасибо,

Маттиас


person Mattias Farnemyhr    schedule 03.01.2014    source источник


Ответы (1)


Настройка по умолчанию для Restify помещает проанализированные параметры в req.params. Это делается как queryParser, так и различными промежуточными программами bodyParser.

Итак, чтобы получить доступ к параметру quantity, используйте req.params.quantity.

Если вы действительно хотите использовать вместо этого req.body, вам нужно передать mapParams : false конструктору bodyParser:

app.use(restify.plugins.urlEncodedBodyParser({ mapParams : false }));

Теперь req.body будет содержать проанализированные параметры.

person robertklep    schedule 03.01.2014
comment
В тот момент, когда я использую парсер, вся моя служба перестает отвечать на любой URL-адрес. Он просто никогда не возвращается, и точки останова не срабатывают. - person Christian Bongiorno; 21.10.2015
comment
@ChristianBongiorno обычно это признак того, что промежуточное ПО не передает запросы по цепочке промежуточного ПО. Этот ответ довольно старый, возможно, с тех пор что-то изменилось, что может вызвать поведение, которое вы наблюдаете. - person robertklep; 22.10.2015
comment
Я обнаружил это независимо, но вы правы. Модуль CORS останавливал все это. Честно говоря, restify меня не особо впечатляет. - person Christian Bongiorno; 22.10.2015