Node.js Sailsjs:模型中的动态表名

Node.js Sailsjs:模型中的动态表名,node.js,sails.js,Node.js,Sails.js,我正在构建我的第一个sailsjs和nodejs应用程序,它很棒:) 我的情况是,我有大约100张相同结构的桌子,我想“在飞行中”决定加载哪张桌子 我的第一个想法是使用动态类名。但是我不知道如何处理nodejs,也许有人有主意 所以我会在我的models文件夹中创建100个“modelName”.js文件 我可以在浏览器中使用它 window["fileName"].find().... 但是我在nodejs中没有任何窗口对象 第二个想法是将表名传递给模型,问题是,我必须重新生成模型,不知道如

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

我的情况是,我有大约100张相同结构的桌子,我想“在飞行中”决定加载哪张桌子

我的第一个想法是使用动态类名。但是我不知道如何处理nodejs,也许有人有主意

所以我会在我的models文件夹中创建100个“modelName”.js文件

我可以在浏览器中使用它

window["fileName"].find()....
但是我在nodejs中没有任何窗口对象

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

有解决方案吗?

找到了解决方案

var modelName = req.param('p');
this[modelName].find()...
找到了解决办法

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

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

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

然后您就可以自由使用此[modelName]。您需要什么

我将其用于通用策略,允许用户只编辑自己的组元素

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')
    }
  })

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

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

然后您就可以自由使用此[modelName]。您需要什么

我将其用于通用策略,允许用户只编辑自己的组元素

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')
    }
  })

另一个对我有效的选择:

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

另一个对我有效的选择:

var modelName = "User";
global[modelName].find()....
另一种选择:

sails.models[Model].findOne({...})
确保您的“模型”名称为小写字符串。它的工作原理类似于访问对象内部的属性

另一种方法:

sails.models[Model].findOne({...})
确保您的“模型”名称为小写字符串。它的工作原理类似于访问对象内部的属性