【问题标题】:A form with POST method submitting a GET使用 POST 方法提交 GET 的表单
【发布时间】:2016-11-28 17:33:57
【问题描述】:

这是我遇到过的最奇怪的问题,这是视图(玉):

extends layout
block content
 h1 Edit chatroom!!
 form(method="POST")
      fieldset.form-group
          label(for="name") Name:
          input.form-control(name="name", type="text", placeholder="Enter a name" value="#{room.name}")
          small.text-muted Give your chatroom a meaningful name for people to refer to it.
      button.btn.btn-primary(type="submit") Save chatroom
      a.btn.btn-default(href="/admin/rooms") Cancel     

这是返回给浏览器的页面源代码的表单源:

<form method="POST">
               <fieldset class="form-group"><label for="name">Name:</label><input name="name" type="text" placeholder="Enter a name" value="independents" class="form-control"><small class="text-muted">Give your chatroom a meaningful name for people to refer to it.</small></fieldset>
               <button type="submit" class="btn btn-primary">Save chatroom</button><a href="/admin/rooms" class="btn btn-default">Cancel        </a>
            </form>

当我按下“保存聊天室”按钮时,我在网页上收到此错误消息:

Cannot GET /admin/rooms/edit/

这个快速路由器应该处理表单提交

router.route('/rooms/edit/:id')
.all(function(req, res, next) {
    var roomid = req.params.id;
    var room = _.find(rooms, r => r.id == roomid);
    if (!room) {
        res.sendStatus(404);
        return;
    }
    res.locals.room = room;
    next();
}).get(function(req, res) {
    res.render('edit');
}).post(function(req, res) {
    res.locals.room.name = req.body.name;
    //res.redirect(req.baseUrl + '/rooms'); or we can also
    res.redirect('./'); // but this is not good because if we had http://localhost:3000/admin/rooms/add/ it will take us to /add
});

我写的this previous question这个小快递应用的全部代码(两个js文件)存在。

【问题讨论】:

  • 你做了一个重定向到res.redirect('./');,所以它跟随重定向并发出一个GET请求。你期待什么?

标签: html node.js express pug


【解决方案1】:

在你的路线定义中你有

if (!room) {
  res.sendStatus(404);
  return;
}

看起来在您的代码中,您没有向具有 ID 的 URL 提交任何请求,因此它返回 404,就像您告诉它的那样。

除非您访问的网址有 ID。这个页面上的 URL 是什么样的?

【讨论】:

  • res.redirect('./');问题是因为我调试了路线并且一切都很好,现在我将重定向更改为 res.redirect(req.baseUrl + '/rooms');它有效,我不知道为什么会出现问题
猜你喜欢
  • 2010-10-10
  • 1970-01-01
  • 2019-04-27
  • 1970-01-01
  • 2015-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-28
相关资源
最近更新 更多