2016-11-28 74 views
0

这是我过的奇怪的问题的一种形式,这是图(玉):与POST方法提交GET

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 
}); 

这个小快递程序的整个代码(二js文件)的this previous question有我写的。

+1

你做了一个重定向到'res.redirect('./');',所以它遵循重定向并发出一个GET请求。你期望什么? – Quentin

回答

1

在你的路线确定指标,你有

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

它看起来像在你的代码,你不提交到具有ID的URL的任何请求,所以它的返回404就像你告诉它。

除非您使用的网址具有ID。该网址上的网址看起来像什么?

+0

res.redirect('./');是因为我调试的路线和evrything是好的,现在我改变了res.redirect重定向(req.baseUrl +'/ rooms');它的工作原理,我不知道为什么发生问题 – Bardelman