我正在尝试创建一种让用户通过这样的端点搜索我的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>
我的问题是我不知道将提交的字符串从文本框获取到请求参数中的干净方法。
使用快速路由app.get('/search/:input', function(req, res){
则:input
是路径参数输入,但您的 html 表单将发出 GET 请求/search/?firstname=firstname_value
,请求不会移动到路由。
如果要使用 GET 方法,请使用app.get('/search', function(req, res){
而不是当前代码,然后console.log(
get 请求:/members/${req.query.firstname});
。
(我不知道为什么在路由设置/search/
时日志显示/members/
???)
您可以使用 ajax get 方法传递输入框值,使用req.params.input访问该值。以下是我尝试过的代码。
应用.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>