将表单值传递给节点中的uri并表达

时间:2016-01-25 17:12:31

标签: node.js express mean-stack mean

这是我的input.jade文件

div
  form(action='/wiki/<topic-name>',method='post')
    div(data-role='fieldcontain')
      fieldset(data-role='controlgroup')
        label(for='topicname') Topicname
          input(id='topicname',type='text',value='',placeholder='topicname',name='topicname')

    div(data-role='fieldcontain')   
      input(type='submit',value='Sign Up',data-transition='fade', data-theme='c')

在提交时,我希望它重定向到/ wiki / 主题名称 ,其中 主题名称 由用户在表单中输入。

这是我的路线档案。

router.get('/input', function(req, res, next) {
  res.render('content/input', { title: 'Express' });
});
router.get('/wiki/:topicname', function(req, res, next) {
    var topicname = req.params.topicname;
    //other code
});

应该怎么做?有更好的方法吗?

编辑:如果我不想通过邮寄方式传递价值,我该怎么办? (在制作form method =“get”之后)。请注意,我希望它重定向到特定的URI。

2 个答案:

答案 0 :(得分:1)

正如另一个回复所指出的,您需要从表单操作中删除:topicname。

假设您正在使用Express 4,从输入字段中获取topicname并重定向到/ wiki / topicname:

//your jade form submits here
router.post('wiki/', function(req, res, next) {
    res.redirect('wiki/' + req.body.topicname);
});

//the post redirects to this page, where you do your work
router.get('wiki/:topicname', function(req, res, next) {
    var topicname = req.params.topicname;
});

答案 1 :(得分:0)

你应该只在HTTP / Get操作中使用URI params,看看你想要发送一个FORM帖子,你的router.get('/wiki/:topicname'永远不会被调用,因为它正在等待GET而不是POST。

你应该这样做(代码注释):

div
  form(action='/wiki',method='post') /*removed the uri param*/
    div(data-role='fieldcontain')
      fieldset(data-role='controlgroup')
        label(for='topicname') Topicname

input(id='topicname',type='text',value='',placeholder='topicname',name='topicname')

div(data-role='fieldcontain')   
  input(type='submit',value='Sign Up',data-transition='fade', data-theme='c')


router.get('/input', function(req, res, next) {
  res.render('content/input', { title: 'Express' });
});
router.post('/wiki', function(req, res, next) { // now route is getting POST
    var topicname = req.body.topicname; // get params from body
    //other code
});