我能够使用像db.getCollection('catalog').find({user_id:"56703f1a2fc76861e6a8743e"})
这样的终端中的mongo命令来检索我的数据,但是当我尝试使用nodejs时,我得到了null。
我的路线就像这样
var Catalog = require('../models/catalog');
router.get('/', function(req, res) {
if (!req.user) {
res.redirect('/login');
} else{
Catalog.getAllCatalog('56703f1a2fc76861e6a8743e', function(catalog){
console.log(catalog) //null
res.render('catalog/index');
});
}
});
我的目录模型
var Catalog = module.exports = mongoose.model('catalog', catalogScheme);
module.exports.getAllCatalog = function(user_id, callback){
Catalog.find({"user_id":user_id}, callback);
}
有什么想法吗?
答案 0 :(得分:3)
首先,正如@chridam在他们的回答中已经指出的那样,回调的Node.js约定是它们(至少)有两个参数:第一个保留用于传递错误,第二个用于传递错误,第二个(可能是任何其他)用于传递结果数据。
其次,默认情况下,Mongoose将采用模型名称(在您的情况下为catalog
)并将其小写并复数以确定它将使用的MongoDB集合名称。因此,您的模型catalog
默认使用名为catalogs
的集合。记录此行为here。
由于您的数据存储在名为catalog
(单数)的集合中,因此您的查询不会产生任何结果。要解决此问题,您需要在架构中指定Mongoose应使用catalog
作为集合:
var catalogScheme = mongoose.Schema({
...
}, { collection : 'catalog' });
编辑:您还可以完全禁用名称修改,这将使Mongoose使用模型名称作为集合名称:
var mongoose = require('mongoose');
mongoose.set('pluralization', false);
// create your schema/models from here...
答案 1 :(得分:1)
您的回调函数只有一个参数,您需要有两个参数:err
对象和result
。您可以在else子句中重构您的代码:
Catalog.getAllCatalog('56703f1a2fc76861e6a8743e', function(err, catalog){
if (err) { /* handle error here */ };
console.log(catalog);
res.render('catalog/index');
});