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

时间:2017-10-19 19:43:48

标签: javascript node.js express

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

谢谢大家,任何帮助都将不胜感激。

1 个答案:

答案 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"