我有一个非常基本的应用程序,可以创建报告。我有一个应该从mongo数据库查询和拉取_id的一块。无论我无法通过_id找到工作。请注意,当我需要显示所有报告时,find()可以正常工作。我已经搜索了溢出并尝试了一些我见过的不同解决方案,但似乎没有工作......:
ObjectID(req.params.string)
new ObjectID(req.params.string)
BSON.ObjectID(req.params.id)
db.collection.serializer.ObjectID....etc
这是该片的当前代码,我正在使用最新版本的mongoDB和驱动程序(2.6和1.4),感谢任何帮助人员!: 来自reportRoutes.js的片段 var mongo = require(' mongodb');
var Server = mongo.Server,
Db = mongo.Db,
BSON = mongo.BSONPure;
ObjectID = mongo.ObjectID;
exports.findById = function(req, res) {
var id = new ObjectID.createFromHexString(req.params.id);
console.log('Retrieving report: ' + id);
db.collection('reports', function(err, collection) {
db.collection.findOne({ '_id': (id)}, function(err, item) {
res.send(item);
});
});
};
来自Server.js的片段
app.get('reports/:id', reportRoutes.findById);
这是我转到
时的控制台输出http://localhost:3000/reports/53d2c100132358560c000001:
未捕获的TypeError:无法读取属性' getCurrent'未定义的popup.js:17
这是当我转到
时的mongo文档http://localhost:3000/reports/ <-just does a collection.find()
{
"_id": "53d2c100132358560c000001",
"name": "Whatheheck",
"author": "cornhole",
"date": "07232014",
"costs": "200",
"cash": "2070",
"avoidances": "9000",
"reuse": "3000",
"recycle": "20000",
"time": "",
"description": "",
"picture": null
}
这是使用db.reports.find()从mongoshell中提取的文档。漂亮()
{
"_id" : ObjectId("53d2c100132358560c000001"),
"name" : "Whatheheck",
"author" : "cornhole",
"date" : "07232014",
"costs" : "200",
"cash" : "2070",
"avoidances" : "9000",
"reuse" : "3000",
"recycle" : "20000",
"time" : "",
"description" : "",
"picture" : null
}
答案 0 :(得分:0)
在db.collection
回调中,当您应该呼叫db.collection.findOne
时,您正在呼叫collection.findOne
。所以像这样:
exports.findById = function(req, res) {
var id = ObjectID(req.params.id);
db.collection('reports', function(err, collection) {
collection.findOne({ '_id': id }, function(err, item) {
res.send(item);
});
});
};
答案 1 :(得分:-1)
@JohhnyHK我仔细检查了一切并意识到这不是
app.get('reports/:id', reportRoutes.findById);
应该是
app.get('/reports/:id', reportRoutes.findById);
感谢指针!