如何将HTML文本框表单输入到Express Route Paramater中

时间:2018-02-21 07:31:58

标签: javascript html node.js mongodb express

我正在尝试为用户创建一种方法,通过这样的端点搜索我的mongo数据库:

app.get('/search/:input', function(req, res){
  console.log(`get request to: /members/${req.params.input}`);
  var regexValue = '\.*'+req.params.input+'*\.';
  db.collection(myCollection).find({"full_name": {$regex: regexValue, $options: 'i'}}).toArray((err, members) => {
    if(err) return console.log(err)
    console.log(members);
    res.render('search/list', {members: members});
  })
});

我希望他们能够输入一个文本框并让它直接执行此端点。我有一个非常简单的文本框:

<form action="/search/">
  <input type="text" name="firstname" ><br>
  <input type="submit" value="Submit">
</form>

我的问题是我不知道从文本框中将提交的字符串放入请求参数的简洁方法。

2 个答案:

答案 0 :(得分:1)

您可以使用ajax get方法传递inputbox值,使用 req.params.input 访问该值.Below是我尝试过的代码。

<强> app.js

app.get('/:input', function(req, res) {
  console.log(req.params.input);
});

<强> index.ejs

<!DOCTYPE html>
<html>
<head>
  <title>Page Title</title>
</head>
<body>
<input type="text" name="firstname" id="firstname" ><br>
<input type="button" value="search" id="search">
<script src="http://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
    $('#search').click(function(){
        var firstname = $('#firstname').val();
        $.ajax({
            url: "http://localhost:3000/users/"+firstname,
            method: 'get'
        }).done(function() {

        });
    })

</script>

</body>
</html>

答案 1 :(得分:1)

使用快速路由app.get('/search/:input', function(req, res){,然后:input是路径参数输入,但您的html表单将发出GET请求/search/?firstname=firstname_value,请求将不会加载到路由。

如果您想使用GET方法,请使用app.get('/search', function(req, res){代替当前代码,然后console.log(获取请求:/members/${req.query.firstname});

(我不知道为什么日志显示/members/ ???路由设置为/search/