Использование метода PUT с помощью Express.js
Я пытаюсь реализовать функциональность обновления в приложении Express.js, и я бы хотел использовать запрос PUT для отправки новых данных, но я продолжаю получать ошибки с помощью PUT. Из всего, что я читал, это просто вопрос использования app.put, но это не работает. В файле маршрутов у меня есть следующее:
send = function(req, res) {
req.send(res.locals.content);
};
app.put('/api/:company', function(res,req) {
res.send('this is an update');
}, send);
Когда я использую почтальон для выполнения запроса PUT, я получаю сообщение "can not PUT/api/petshop" как ошибка. Я не понимаю, почему я не могу PUT, или что не так.
Ответы
Ответ 1
Возможно, вам не хватает фактической функции обновления. У вас есть путь put, возвращающий результат обратно клиенту, но отсутствует часть, когда вы сообщаете базе данных об обновлении данных.
Если вы используете mongodb и express, вы можете написать что-то вроде:
app.put('/api/:company', function (req, res) {
var company = req.company;
company = _.extend(company, req.body);
company.save(function(err) {
if (err) {
return res.send('/company', {
errors: err.errors,
company: company
});
} else {
res.jsonp(company);
}
});
Этот средний проект стека может помочь вам, поскольку он охватывает эту функциональность CRUD, которую я только что использовал, заменяя свои статьи для ваших компаний. то же самое.
Ответ 2
Также, если вы хотите перенаправить в put
или delete
(на адрес get
), вы не можете использовать обычный res.redirect('/path')
, вы должны использовать вместо него res.redirect(303, '/path')
. (источник)
Если нет, вы получите ошибку Cannot PUT
.
Ответ 3
изменить порядок функции обратного вызова (req, res).
не использовать функцию (res, req).
Ответ 4
Вы проверяли информацию о ваших заголовках? Потому что заголовок должен быть header['content-type'] = 'application/json';
тогда только вы получите объект обновления на стороне сервера (node-express), в противном случае, если у вас есть такой тип контента обычный 'text/htm', вы получите empty req.body
в приложении вашего узла.