我通过构建一个简单的小应用程序来学习Express / Mongo(使用mLab),我可以创建一个客户列表和一个客户端详细信息页面。
localhost:3000 / clients 呈现整个' 客户'
的集合localhost:3000 / clients /:id 应按ID呈现特定客户
这是一个集合:来自MongoDB(mLab)的客户条目示例:
{
"_id": {
"$oid": "57ba01d3ab462a0aeec66646"
},
"name": "ClientName",
"address": {
"street": "StreetName",
"city": "Cityname",
"state": "Statename",
"zip": "1234"
},
"createDate": {
"$date": "2016-08-21T19:32:35.525Z"
}
}
我在 / clients 页面上成功创建了一个href,其id值链接到特定客户端:
<a href="/clients/<%= client._id %>"><%= client.name %></a>
正确的结果如下:
http://localhost:3000/clients/57ba01d3ab462a0aeec66646
以下是 / clients /:id 的获取功能:
app.get('/clients/:id', (req, res) => {
db.collection('clients').findOne(req.params.id, (err, result) => {
if (err) {
handleError(res, err.message, "Failed to get clients.");
} else {
console.log(result);
res.render('client.ejs', {client: result})
}
});
})
点击该链接会导致以下错误:
MongoError:查询选择器必须是对象 Function.MongoError.create (/Users/username/Desktop/node/node_modules/mongodb-core/lib/error.js:31:11) 在Collection.find [...]
我整个下午一直在阅读和搜索,并尝试了很多不同的选项,如:
我真的需要猫鼬吗?这似乎是一个基本的事情做它Mongo - 为什么它没有工作?
答案 0 :(得分:0)
您需要使用对象:{id: req.params.id}
app.get('/clients/:id', (req, res) => {
db.collection('clients').findOne({_id: req.params.id}, (err, result) => {
if (err) {
handleError(res, err.message, "Failed to get clients.");
} else {
console.log(result);
res.render('client.ejs', {client: result})
}
});
})
答案 1 :(得分:0)
您需要将req.params.id转换为MongoObject,然后使用它:
var id = new ObjectID(req.params.id);
答案 2 :(得分:0)
可能是这样的:
db.collection('clients').findOne({"_id.$oid": req.params.id}, (err, result) =>