我有一个包含驱动程序架构的driver.js。还有driverController.js,它包含我的rest方法。 GET,POST,DELETE和PUT。
我想做的是
GET - http://localhost:3000/drivers?available=true
让它返回所有可用的驱动程序。
我的驱动程序架构看起来像这样:
var mongoose = require('mongoose');
var DriverSchema = new mongoose.Schema({
name: String,
available: Boolean,
latitude: Number,
longitude: Number
});
mongoose.model('Driver', DriverSchema);
module.exports = mongoose.model('Driver');
我看了一些documentation,但我还没有做任何事情。
这是我尝试添加参数的GET方法
// GETS ALL DRIVERS FROM THE DATABASE
router.get('/', function (req, res) {
Driver.find({}, function (err, driver) {
if (err) return res.status(500).send("There was a problem finding the drivers.");
var available = req.query.available;
if (available == driver.available )
res.status(200).send(available );
else
res.status(200).send("Nice! " + driver.available);
});
});
这种比较并没有奏效。它总是转到else语句。我不太清楚为什么,但输出是"很好!未定义"即使我的数据库中有很多驱动程序,如果我只放入else语句中 res.status(200).send(" Nice!" + driver); 然后它给了我驱动程序列表。
尽管如此,我希望能够使用查询参数来查找驱动程序。
任何提示或提示都会非常感激,因为这是一个项目,我之前从未使用过restAPI或javascript。谢谢!
注意:猫鼬,快递。正在使用node.js和mongoDB。
答案 0 :(得分:0)
如果我只放入else语句res.status(200).send(“Nice!”+ driver);然后它给了我驱动程序列表。
这是一个驱动程序列表,if (available == driver.available )
您将boolean
与一组对象进行比较,
而不是提取所有驱动程序并检查它们是否有availabe == true
,而是将条件添加到.find()
并返回结果:
// GETS ALL DRIVERS FROM THE DATABASE
router.get('/', function (req, res) {
Driver.find({ available : req.query.available }, function (err, drivers) {
if (err) return res.status(500).send("There was a problem finding the drivers.");
res.status(200).send(drivers);
});
});
编辑:
您可以根据查询字符串添加过滤器:
// GETS ALL DRIVERS FROM THE DATABASE
router.get('/', function (req, res) {
var params = {};
Object.keys(req.query).forEach((v, k) => params[k] = v);
Driver.find(params, function (err, drivers) {
if (err) return res.status(500).send("There was a problem finding the drivers.");
res.status(200).send(drivers);
});
});
拥有?name=Wario&available=true
会创建{ name : 'wario', available : true
之类的对象并将其传递给.find()