Sailsjs:模型中的dynamictableName

我正在构build我的第一个sailsjs和nodejs应用程序,它非常棒:)

我的情况是,我有大约100张同样结构的桌子,我想决定“即时”加载哪张桌子。

我的第一个想法是以某种方式使用dynamic类名。 但是我不知道如何用nodejs做到这一点,也许有人有一个想法。

所以我会在模型文件夹中创build100个“modelName”.js文件。

我可以在浏览器中使用它

window["fileName"].find().... 

但是我在nodejs中没有任何窗口对象

第二个想法是将tableName传递给模型,问题是,我必须重新模型,不知道如何。

任何解决scheme

find了解决办法

 var modelName = req.param('p'); this[modelName].find()... 

作者自己的回答是正确的,但是我会为将来使用它的人添加一些东西 – 当你使用蓝图时,你可以从req.options.model获得modelName

不幸的是,你不能使用this[modelName]作为选项给你模型的名字以小写字母开头,所以首先你必须使用例如var modelName = req.options.model.charAt(0).toUpperCase() + req.options.model.slice(1);

然后你可以自由地使用this[modelName].whateverYouNeed

我用它作为通用策略,让用户只编辑自己的组元素。

 var modelName = req.options.model.charAt(0).toUpperCase() + req.options.model.slice(1) var elementID = null if (req.params.id) { // To handle DELETE, PUT elementID = req.params.id } if (req.body.id) { // To handle POST elementID = req.body.id } this[modelName].findOne({ id: elementID }).exec(function(err, contextElement) { if(err) { return res.serverError(err) } if(contextElement.group=== req.user.group.id) { sails.log('accessing own: ' + modelName) return next() } else { return res.forbidden('Tried to access not owned object') } }) 

另一个select,为我工作:

 var modelName = "User"; global[modelName].find()....