我有一个node.js项目。在我的项目中,我想使用带有动态名称的集合(均值模型)名称。在我的代码中,我将向您解释我的需求实际上是什么。这段代码工作正常。
User.findById(req.param('id'),function(err,user){
console.log('entered');
if(err){
res.json(HttpStatus.INTERNAL_SERVER_ERROR,{error:'unexpected error'});
return;
}
if(user == null){
res.json(HttpStatus.NOT_FOUND,{error:'user not found'});
return;
}
console.log("success");
这里,我的集合(模型)名称是User。但我想通过使用下面的代码将客户端的值用作“集合名称”
var temp = req.body.collectionName; // example: var temp ='User';
我可以在“User”.findById的位置使用temp变量的值。如果没有,我可以获得任何可能的解决方案来实现此功能吗? 提前致谢。
答案 0 :(得分:0)
您还没有提到您正在使用的框架和ORM,所以这里有一个简单的方法,您可以使用,只要您的模型名称是预先确定的:
var collections = {
"User": User,// reference for model User
"Resource": Resource
};
var temp = req.body.collectionName;
if (collections[temp]) {
collections[temp].findById(req.param('id,), handler);
}
您应该首先尝试找出您的ORM是否提供模型的列表/映射,并在可能的情况下使用它。通常有钩子或其他固有的访问方式。
答案 1 :(得分:0)
看起来您正在使用Mongoose,在这种情况下,您可以使用mongoose.model(MODEL_NAME)
来获取对特定模型的引用:
var mongoose = require('mongoose');
...
var User = mongoose.model('User'); // or `req.body.collectionName`
User.find(...);
答案 2 :(得分:0)
此代码对我不起作用。我正在使用带有node.js的express框架。我使用mongoose作为我的中间件。
var collections = {
"User": User,// reference for model User
"Resource": Resource
};
var temp = req.body.collectionName;
if (collections[temp]) {
collections[temp].findById(req.param('id,), handler);
}