我遇到一个问题,使用方法覆盖并尝试使用它来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 :(得分: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"