【发布时间】:2016-08-31 22:51:58
【问题描述】:
为各种不同的显示器创建 API。想检索数据库中的所有显示,然后传递自定义查询字符串,然后进一步过滤。整天都在研究如何做到这一点,但没有什么是完全有意义的,或者无法让它完全按预期工作。
示例 URL:localhost:3000/api/v1/displays?hdmi=true&hdmi_version=1.2。从理论上讲,这些自定义查询的范围可以来自所有不同的规范显示,包括不同的值(字符串、布尔值和整数)。
技术
- 快递:4.13.4
- 节点:5.6.0
- MongoDB(本地):3.2.4
- Angular:1.5,将是最终的前端,但只是尝试构建 API 并使用 POSTman
数据库:
[
{
"_id": "572be4122847a355994a07d9",
"series": "meh-monitor",
"hdmi": false,
"hdmi_version": "",
"vga": true,
"resolution": "1366x768"
},
{
"_id": "572be4122847a355994a07da",
"series": "ok-monitor",
"hdmi": true,
"hdmi_version": "1.0",
"vga": true,
"resolution": "1920x1080"
},
{
"_id": "572be4122847a355994a07db",
"series": "good-monitor",
"hdmi": true,
"hdmi_version": "1.2",
"vga": false,
"resolution": "2560x1440"
}
]
快递-server.js
var express = require('express');
var app = express();
var path = require('path');
var port = process.env.PORT || 3000;
var mongojs = require('mongojs');
var bodyParser = require('body-parser');
var db = mongojs('products', ['displays']);
var apiVersion = "v1";
所以我可以得到所有的显示:
app.get('/'+apiVersion+'/displays', function(req, res){
db.displays.find(function(err,docs){
if(err){
res.send(err);
}
else{
return res.json(docs);
}
});
});
或使用 id 参数获取特定显示:
// GET ONE ENTRY
app.get('/'+apiVersion+'/displays/:id', function(req,res){
db.displays.findOne({_id:mongojs.ObjectID(req.params.id)},function(err,doc){
if(err){
res.send(err);
}
else{
return res.json(doc);
}
});
});
问题只是传递自定义参数。尝试使用mongo-querystring 哪种有效,但无法通过hdmi_version=#.# 或resolution=####x#### 过滤。此外,文档示例对我来说并不完全清楚。
任何帮助将不胜感激。
【问题讨论】:
标签: node.js mongodb rest express