Я испытываю проблему с использованием метода-переопределения и пытаюсь использовать его для PUT для элемента в Mongo. Поэтому я могу позвонить через Postman и обновить документ, как ожидалось, но, пытаясь сделать это с помощью пользовательского интерфейса, мы получаем:
Request URL:http://localhost:3000/characters/?_method=PUT
Request Method:POST
Status Code:404 Not Found
Вот маршруты и такие:
app.js
const express = require('express');
const bodyParser = require('body-parser');
const methodOverride = require('method-override');
//
//
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(methodOverride('_method'));
маршруты
router.put('/:id', (req, res) => {
Character.findOne({
_id: req.params.id
})
.then(character => {
//
//
character
.save()
.then(character => {
res.redirect('/characters/show/${character.id}');
})
});
и HTML
<form action="/characters/{{character.id}}?_method=PUT" method="POST" class="col s12">
<input type="hidden" name="_method" value="PUT" />
<input type="submit" value="Save" class="btn">
</form>
Спасибо всем, любая помощь будет оценена по достоинству.
Вы не передаете значение для :id
в маршруте, и у вас нет маршрута для просто /characters/
.
URL:http://localhost:3000/characters/?_method=PUT
Вы должны убедиться, что character.id
установлен - он кажется пустым в вашем примере.
action="/characters/{{character.id}}?_method=PUT"
Вы также указываете POST
как метод для формы, вы должны использовать PUT
.
method="PUT"
Если вы хотите сделать :id
опцией, следуйте за ней с вопросительным знаком:
router.put('/:id?', (req, res) => {
Вы также можете проверить маршрут путем жесткого кодирования значения и посмотреть, есть ли у вас еще 404.
action="/characters/123?_method=PUT"
method-override
, поэтому method="POST"
в форме должно работать нормально.
router.put('/characters/:id
или этот маршрутизатор уже подключен к маршрутизатору с префиксом/characters
?:id
.