这是我的模特
var boxSchema = new mongoose.Schema({
name: String,
link: String,
mark: String,
price: Number,
format: Array,
});
路线
router.get('/', function(req, res) {
var where = {};
if(req.param('mark')) {
where.mark= req.param('mark');
}
if(req.param('format')) {
where.format = req.param('format');
}
var perPage = 9;
var page = parseInt(req.param('page')) || 1;
Box
.find(where)
.skip((perPage * page) - perPage)
.limit(perPage)
.exec(function(err, Boxs) {
Box.count(where).exec(function(err, count) {
if(err) {
console.log(err);
res.redirect('/');
}
var fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
if(fullUrl.indexOf('?') == -1) {
fullUrl = fullUrl + '?';
}
fullUrl = fullUrl.replace(/^.*\/\/[^\/]+/, '').replace('&page=' + page, '');
res.render('./configurator/box/index', {
Boxs: Boxs,
current: page,
pages: Math.ceil(count / perPage),
URL: fullUrl
});
});
});
});
Box可以具有以下格式:mITX,ATX,eATX,mATX,mITX,CEB,EEB,UCFF,Mini-STX。当然,一个盒子可以有更多的格式。
当我发送一种格式为http://localhost:3000/boxes?format=ATX的GET请求时。效果很好,因为我只收到具有ATX格式的盒子。
问题是当我想要显示具有ATX或CEB格式的框时。 (http://localhost:3000/boxes?format=ATX&format=+CEB)。我没有任何盒子。
答案 0 :(得分:0)
好吧,因此首先您需要按如下所示将多个format
值发送到服务器
http://localhost:3000/boxes?format=ATX&format=CEB
Express
会将查询字符串值解析为一个数组,该数组可从req.query
中访问
console.log(req.query.format);
// ['ATX', 'CEB']
现在有了过滤器参数,您可以使用$in运算符来构建mongo查询
const where = {};
if (req.query.format) {
if (Array.isArray(req.query.format)) {
where.format = {
$in: req.query.format
};
} else {
where.format = req.query.format;
}
}