2014-10-02 3 views
2

есть ли способ поместить некоторые данные в модель перед отправкой ее клиенту?Sails JS: улучшить модель перед отправкой ответа

Например, пользователь отправляет запрос на получение списка продуктов, и я хочу добавить свойство comment_count в каждый продукт. Как мне это сделать вместо написания цикла внутри контроллера?

спасибо.

ответ

1

Не уверен, что мое решение верное. Но попробуйте переопределить один из двух следующих методов: toJSON & toObject. Хотя document плохой, вам стоит попробовать. Если решение не работает. Может быть, вы должны использовать оператор цикла. Посмотрите на Underscore или Lodash для удобства :).


1

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

toJSON: function() { 

    // Get the plain-object version of this instance 
    var obj = this.toObject(); 

    // Remove the password 
    delete obj.password; 

    // Return 
    return obj; 

} 

toJSON автоматически вызывается метод ответа по умолчанию res.json парусов.

К сожалению, «подсчет комментариев» обычно не является тем, что вы можете делать синхронно, поскольку для этого потребуется взаимодействие с базой данных. Итак, toJSON отсутствует. Вместо этого вы можете написать метод класса findProducts для класса Product, который выполняет нормальный Product.find, а затем перебирает результаты и добавляет свойство comment_count для каждого. Размещение кода в методе класса модели лучше, чем выполнение его непосредственно в действии контроллера, поскольку метод класса можно вызывать из любого места (т. Е. Его можно использовать в нескольких контроллерах).