Javascript 如何在Mongoose/Express中搜索使用select multiple构建的数组
我正在构建一个依赖于选择多属性的搜索表单 这是表格的代码Javascript 如何在Mongoose/Express中搜索使用select multiple构建的数组,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我正在构建一个依赖于选择多属性的搜索表单 这是表格的代码 <form action="/search" method="get"> <select name="q" multiple> <optgroup label="Fruit"> <option value="peach">Peach</option> <option value="apple">Apple</option>
<form action="/search" method="get">
<select name="q" multiple>
<optgroup label="Fruit">
<option value="peach">Peach</option>
<option value="apple">Apple</option>
<option value="pear">Pear</option>
<optgroup label="Meat">
<option value="chicken">Chicken</option>
<option value="beef">Beef</option>
<option value="pork">Port</option>
<optgroup label="Dairy">
<option value="milk">Milk</option>
<option value="cheese">Cheese</option>
<option value="yogurt">Yogurt</option>
</select>
</form>
以下是搜索路径及其回调
//routes/index.js
exports.search = function(req, res) {
Recipe.find({ 'ingredients' : { $all: [req.query.q] }, 'name', function(err, recipes) {
if (err) return handleError(err);
res.render('./index', { title: "Recipe Book", recipes : recipes});
});
})
如果我传递一个值http://yourserver:3000/?q=milk,所有以牛奶为原料的配方都会显示出来;然而,两个valueshttp://yourserver:3000/search?q=milk&q=beef 没有显示任何内容
用于显示结果的视图
.row
p Welcome to #{title}
table.table
thead
th Name
tbody
each recipe in recipes
tr
td= recipe.name
我看不出我做错了什么,也看不出为什么这不起作用。如果您有任何想法,我们将不胜感激。请将我的答案完全修改为正确的:
console.log(req.param('q'));
调用.param函数将正确地将参数编译成数组。我认为问题在于我将req.query.q包装在数组符号[]中。它已作为数组传入。我这样说是因为console.logreq.query.q使用单个查询值搜索?q=Peach显示Peach,使用多个查询值搜索?q=Peach&Apple显示数组['Peach','Apple']。完全修改了我的答案,使之更加有用。威尔,谢谢你的回复。我认为问题在于我将req.query.q包装在数组符号[]中。它已作为数组传入。我这样说是因为console.logreq.query.q使用单个查询值search?q=Peach显示Peach,而使用多个查询值search?q=Peach和Apple显示数组['Peach','Apple']。
console.log(req.param('q'));