如何在node.js中使用动态名称更改集合名称

时间:2015-07-01 14:45:53

标签: node.js

我有一个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变量的值。如果没有,我可以获得任何可能的解决方案来实现此功能吗? 提前致谢。

3 个答案:

答案 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);
    }