Wei*_*Hao 3 javascript mongodb node.js
假设我有两个事件:
{"id":1, "name":"event1"},
{"id":2, "name":"event2"}
Run Code Online (Sandbox Code Playgroud)
我正在编写一个REST API来检索事件.此API采用可选参数,id如果存在,则仅返回特定于该id的事件,并返回所有事件(如果为null).
所以api/events?id=1应该event1只返回,而api/events将返回event1和event2.目前我正在使用if-else语句,但如果我有更多可选参数,这显然是不可扩展的.有没有办法将此表达为MongoDB查询?
码:
app.get('/api/events', function (req, res) {
var _get = url.parse(req.url, true).query,
eventCollection = db.collection('events');
// Parameters passed in URL
var page = (_get.page) ? _get.page * 10 : 0,
org_id = (_get.org_id) ? parseInt(_get.org_id) : "";
if (org_id == "") {
eventCollection.find({
}, {
limit: 10,
skip: page
}).toArray(function(err, events) {
if (!err) {
res.json(
events
);
}
});
} else {
eventCollection.find({
org_id: org_id
}, {
limit: 10,
skip: page
}).toArray(function(err, events) {
if (!err) {
res.json(
events
);
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
PS我正在使用MongoDB的Node.js Javascript驱动程序.
一种想法是使用三元运算符设置查询对象.
类似于以下内容:
app.get('/api/events', function (req, res) {
var _get = url.parse(req.url, true).query,
eventCollection = db.collection('events');
// Parameters passed in URL
var page = (_get.page) ? _get.page * 10 : 0,
query = (_get.org_id) ? {org_id:parseInt(_get.org_id)} : {};
eventCollection.find(query, {limit: 10, skip: page}).toArray(function(err, events){
if (!err) {
res.json(
events
);
}
});
});
Run Code Online (Sandbox Code Playgroud)
话虽如此,如果你有多个参数要查询,一种方法是构建一个JSON对象,如下所示:
app.get('/api/events', function (req, res) {
var _get = url.parse(req.url, true).query,
eventCollection = db.collection('events');
// Parameters passed in URL
var page = (_get.page) ? _get.page * 10 : 0,
query = {};
(_get.org_id) ? (query.org_id = parseInt(_get.org_id)) : "";
(_get.name) ? (query.name = _get.name) : "";
(_get.param3) ? (query.name = _get.param3) : "";
eventCollection.find(query, {limit: 10, skip: page}).toArray(function(err, events){
if (!err) {
res.json(
events
);
}
});
});
Run Code Online (Sandbox Code Playgroud)
我将把它留给你定位查询参数的块并将其转换为for循环.
如果您不知道参数的数量,一个选项是构建一个字符串,然后将其转换为JSON对象.但是,我不推荐这个.让用户定义参数是危险的.
| 归档时间: |
|
| 查看次数: |
4522 次 |
| 最近记录: |