航行蓝图生命周期

我需要添加一些额外的数据,以find蓝图的结果。 我发现这个解决scheme:

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

但是我不能在这里find任何改变回应的方法,或者将callbackjoin到蓝图中。 我甚至试图改变蓝图,并在其中添加cb:

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

但在这种情况下,它每次返回500个状态码(但是有相应的数据)

我一直在同一个问题挣扎几次。 这是我的破解(解释)来解决这个问题。

如果发生错误,蓝图中的构build将始终调用res.okres.notFoundres.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); }; 

似乎只有复制粘贴解决scheme存在。 因此,我将所有代码从node_modules / sails / lib / hooks / blueprints / actions中的文件复制到每个控制器的操作中,然后进行更改。