为各种不同的显示创建API。想要检索数据库中的所有显示,然后传递自定义查询字符串,然后进一步过滤。一整天都在研究如何做到这一点,没有任何事情已经完全有意义,或者无法完全按照预期的那样完成工作。
示例网址:localhost:3000/api/v1/displays?hdmi=true&hdmi_version=1.2
。理论上,这些自定义查询的范围可以从包含不同值(字符串,布尔值和整数)的所有不同规范显示中获得。
技术
数据库:
[
{
"_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####
进行过滤。此外,文档示例对我来说还不是很清楚。
任何帮助都会非常感激。
答案 0 :(得分:1)
您可以通过req.query.paramName获取参数。如图所示查询数据库。
所以,对于像localhost:3000/api/v1/displays?hdmi=true&hdmi_version=1.2&resolution=1920x1080
由于URL参数可能存在,也可能不存在,您还必须先检查。
app.get('/'+apiVersion+'/displays', function(req,res){
//To print the parameters
console.log(req.query.hdmi);
console.log(req.query.resolution);
//Remember to sanitize the query before passing it to db
var query = {};
if (req.query.resolution) query.resolution = req.query.resolution;
if (req.query.resolution) query.hdmi = req.query.hdmi;
db.displays.find(query, function(err, displays){
if (err) {
res.send(err);
}
else {
return res.json(displays);
}
});
});