Использование метода 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 в приложении вашего узла.