2013-08-01 2 views
2

Я строю свои первые sailsjs и nodejs приложения, и это здорово :)Sailsjs: динамическая TABLENAME в модели

Моя ситуация, у меня есть около 100 таблиц с одинаковыми stucture, я хотел бы решить «на лету «какая таблица для загрузки.

моей первой мыслью было использование динамических имен классов. Но я не знаю, как это сделать с nodejs, возможно, у кого-то есть идея.

Так что я бы создал 100 "modelName" .js-файлов в папке моих моделей.

я могу использовать это в браузере

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

Но у меня нет какой-либо объект окна в nodejs

Вторая идея состояла в том, чтобы передать TABLENAME модели, проблема в том, что я должен обновить модель, не знаю, как это сделать.

Любые решения?

ответ

2

найдено решение

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

вы можете принять собственное решение – SheetJS

1

собственный ответ автора правильно, но я добавлю что-то только для людей, которые будут использовать его в будущем - вы можете получить modelName от req.options.model при использовании Blueprints.

К сожалению, вы не можете использовать 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') 
    } 
    }) 
-3

Другой вариант, который работал для меня:

var modelName = "User"; 
global[modelName].find().... 
Смежные вопросы