2016-09-13 14 views
1

findブループリントの結果にいくつかの追加データを追加する必要があります。私はここに応答を変更、または青写真にコールバックを追加する方法を見つけるcan`t帆青写真ライフサイクル

module.exports = { 
    find: function(req, res) { 
    return sails.hooks.blueprints.middleware.find(req, res); 
    } 
} 

しかし:私はこの解決策を見つけました。

module.exports = function findRecords (req, res, cb) { 
    ... 
    if (typeof cb === 'function') res.ok(cb(result)); 
    else res.ok(result); 

が、この場合にはそれが唯一のコピー&ペーストのソリューションが存在するようにするたびに(ただし、該当するデータを持つ)

+0

達成したいことは何ですか?応答またはヘッダーにデータを追加しますか?なぜコールバックを追加していますか? –

+0

@zabware青写真の結果に統計情報(関連するテーブルの数)を追加したいと思います。私はいくつかのコントローラでこれが必要なので、 'find'青写真のコードをコピー/ペーストするだけでは本当にうまくいかないでしょう。 – Crusader

+0

関連するテーブルから情報を入力するのは簡単です。 最初に:テーブルが実際に関連付けられていることを確認してください(例:models/Article.js:module.exports.attributes {...、user = {model: 'User'}}) 2番目: 'sails.config 'を確認してください。 blueprints.populate'はtrueに設定されます。 http://sailsjs.com/documentation/reference/blueprint-api/populate-where – qualbeen

答えて

0

はそう500からstatusCodeを返します。私も青写真を変更し、それにCBを追加しよう。そこで、node_modules/sails/lib/hooks/blueprints/actionsのファイルからすべてのコードをすべてのコントローラのアクションにコピーしてから変更します。

1

私は数回、同じ問題で苦労しています。ここでこれを解決するための私のハック(解説付き)です。

エラーが発生した場合、青写真のビルドではいつもres.ok,res.notFound、またはres.serverErrorがコールされます。このメソッド呼び出しを変更することで、出力を変更することができます。

module.exports.find = function (req, res) { 

    var override = {}; 
    override.serverError = res.serverError; 
    override.notFound = res.notFound; 
    override.ok = function (data) { 

     console.log('overriding default sails.ok() response.'); 
     console.log('Here is our data', data); 

     if (Array.isArray(data)) { 
      // Normally an array is fetched from the blueprint routes 
      async.map(data, function(record, cb){ 

       // do whatever you would like to each record 
       return cb(null, record); 

      }, function(err, result){ 
       if (err) return res.error(err); 
       return res.ok(result); 
      }); 
     } 
     else if (data){ 
      // blueprint `find/:id` will only return one record (not an array) 
      data.foo = 'bar'; 
      return res.ok(data); 
     } 
     else { 
      // Oh no - no results! 
      return res.notFound(); 
     } 
    }; 

    return sails.hooks.blueprints.middleware.find(req, override); 
}; 
+0

Thanx。 resで直接okメソッドをオーバーライドすることはできますか? 'res.ok = function(data){...}; 返信sails.hooks.blueprints.middleware.find(req、res); ' – Crusader

+0

はい@Crusader、これは良いアイデアのようですね!このようにして、 'res'オブジェクトに対する他の依存関係は引き続き機能します。 (しかし私は実際にあなたの提案をテストしていない。) – qualbeen

関連する問題