Как добавить и удалить метод?

Я сделал это приложение в nodejs. Мне нужно добавить метод put, но он не позволяет мне, и я не знаю, где ошибка

  1. Вот код маршрутизатора:
router.get("/post/:title", function(req, res){
    var query = {"title" : req.params.title};
    post.findOne(query, function(err, posts){
        res.render("admin/posts/posts", {posts : posts});
    });
});

router.put('/post/:title', function(req, res) {
  var query = {"title": req.params.title};
  var update = {title: req.body.title, body : req.body.post, created_at : req.body.date, autor: req.body.autor};
  var options = {new: true};
  post.findOneAndUpdate(query, update, options, function(err, posts){
    console.log(posts)
    res.render(
      'admin/posts/post',
      {title : 'posts - ' + posts.pregunta, posts : posts}
    );
  });
});

router.delete('/post/:title', function(req, res) {
  var query = {"title": req.params.title};
  post.findOneAndRemove(query, function(err, posts){
    console.log(posts)
    res.redirect('/admin/posts/');
  });
});

2. hbs view code

<form  method="post" action="/admin/post/{{posts.title}}?_method=PUT">
    titulo
    <input type="text" name="title" value="{{posts.title}}">
    entrada
    <input type="text" name="body" value="{{posts.post}}">
    fecha
    <input type="date" name="date" value="{{posts.created_at}}">
    autor
    <input type="text" name="autor" value="{{posts.autor}}">
    <button type="submit">Enviar</button>
</form>
<form method="post" action="/admin/post/{{posts.title}}?_method=DELETE">
    <button type="submit">Delete</button>
</form>
0
задан 15.10.2016, 13:03
3 ответа

К сожалению put и delete они не являются стандартными в HTML, даже, если ты посылаешь параметр _method к этому отнесутся как параметр в url, больше не как конвертер методов.

Много frameworks используют скрытые поля, чтобы определять тип метода, который они хотят использовать (вещь, которая также не является стандартной):

<form method="POST">
    <input type="hidden" name="_method" value="PUT">
</form>

Так как ты используешь Node.js я рекомендую тебе использовать middleware, который точно делает это, что я комментирую тебе наверху

https://github.com/expressjs/method-override

Этот middleware sobrescribe метод посылая это внутри формуляра как скрытого поля, чтобы это приспосабливать к конфигурации твоего router

1
ответ дан 24.11.2019, 13:05

Согласно стандарту HTML, GET и POST són единственная возможная стоимость в признаке "method".

Если ты меняешь код NodeJS в:

router.post('/post/:title', function(req, res) { ...

он был бы должен functionarte с tag формуляра:

<form method="post" ...
-1
ответ дан 24.11.2019, 13:05

Как я это вижу, ты был бы должен меняться в form из-за <form method="put" y <form method="delete" ты делаешь post во всех твоих формулярах.

-1
ответ дан 24.11.2019, 13:05

Теги

Похожие вопросы