节点/方法覆盖在PUT上给出错误

我遇到一个问题,使用方法覆盖,并试图用它来放到Mongo中的项目。 因此,我可以通过邮递员打电话,并按预期更新文档,但是当通过UI尝试这样做时,我们会收到:

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) => {

你也可以通过硬编码一个值来testing路由,看看你是否仍然得到一个404。

action="/characters/123?_method=PUT"