节点/方法覆盖在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"