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

如何在node.js中使用动态名称更改集合名称,node.js,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'});

我有一个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'; 
我可以用temp变量的值代替“User.findById”吗。如果没有,我能为这个功能找到任何可能的解决方案吗?
提前谢谢

您没有提到您使用的是什么框架和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是否提供了模型列表/映射,并在可能的情况下使用它。通常有一个钩子或其他固有的访问方式。

看起来您正在使用Mongoose,在这种情况下,您可以使用
Mongoose.model(model_NAME)
获取对特定模型的引用:

var mongoose = require('mongoose');
...
var User = mongoose.model('User'); // or `req.body.collectionName`
User.find(...);

这个代码对我不起作用。我正在使用带有node.js的express framework。我使用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);
    }