Переопределение узла / метода дает ошибку на PUT

1

Я испытываю проблему с использованием метода-переопределения и пытаюсь использовать его для 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>

Спасибо всем, любая помощь будет оценена по достоинству.

  • 0
    Должно ли это быть router.put('/characters/:id или этот маршрутизатор уже подключен к маршрутизатору с префиксом /characters ?
  • 0
    В любом случае запрошенный маршрут не существует в коде - отсутствует :id .
Теги:
express

1 ответ

0
Лучший ответ

Вы не передаете значение для :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"

  • 0
    OP использует промежуточное программное обеспечение method-override , поэтому method="POST" в форме должно работать нормально.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню