2015-11-20 8 views
0

Метод атрибута модели sailsjs toJSON очень удобен для обработки атрибутов модели перед отправкой обратно клиенту. Однако этот метод не принимает никаких параметров, и я не могу передать дополнительную информацию методу, который можно использовать для обработки атрибутов.Sails JS: передать параметр toJSON

В моем конкретном случае мне нужно проверить, должен ли я отправлять атрибут, сравнивая зарегистрированный идентификатор пользователя (req.user.id). Например.

toJSON: function() { 
    var obj = this.toObject(); 
    var result = {}; 
    if (req.user.id === 123) { // How can I access req from inside toJSON? 
    // do something here ... 
    } 
} 

Я не смог найти способ доступа к параметру req изнутри в JSON. Какие-либо предложения?

ответ

1

паруса делают намеренно не подвергать атрибут REQ как глобальные, так что нет никакого способа, чтобы получить доступ к нему изнутри toJSON: How to access session variables outside controller

В зависимости от функциональности, которую вы пытаетесь достичь, вы можете быть в состоянии использовать политику вместо : How to access request object in sails js lifecycle callbacks

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

YourModel.findOne().exec(function (err, yourModelObject) { 

    yourModelObject.loggedInUserId = req.user.id; 
    res.send(yourModelObject); 

}); 

Именно тогда доступна в вашем методе toJSON и вы могли бы использовать его как это:

toJSON: function() { 
    var obj = this.toObject(); 
    var result = {}; 

    if (obj.loggedInUserId === 123) { 
    // do something here ... 
    } 

    delete obj.loggedInUserId; 

    return obj; 
} 

Это немного взломать, но это сработало для меня. Будьте осторожны, чтобы пользователь не мог каким-то образом установить одно и то же значение в модели (например, используя schema: true в вашей модели), чтобы предотвратить появление ошибок в вашем коде.

+0

Да, это работает.Спасибо :-) – JustWonder