gpt4 book ai didi

sails.js - 在 Installable Hook 中定义自定义 API 响应

转载 作者:行者123 更新时间:2023-12-01 06:22:43 24 4
gpt4 key购买 nike

我开始编写一个钩子(Hook)来覆盖 res.ok() 返回的 json 格式.解决此问题的最佳方法是什么?我想避免更改 api/responses 中的文件如果可能的话,而是覆盖它们。

hooks README两年没更新了,但它提到:

  • Custom API responses (coming in v0.10: Stage 2 - Unstable)


现在有可能吗?看起来默认 Hook 使用 hook.middleware = responseDefs; ,这是可安装 Hook 的可行选择吗?

最佳答案

我对我的解决方案并不完全满意,但我能够从核心中删除一些辅助函数,这些函数在所有其他钩子(Hook)加载后将我的响应绑定(bind)到路由。

特别是,我复制并调整了 loadResponsesbindToSails来自 moduleloader :


let buildDictionary = require('sails-build-dictionary');
let path = require('path');
let _ = require('lodash');

function bindToSails(sails, cb) {
return function (err, modules) {
if (err) {
return cb(err);
}
_.each(modules, function (module) {
// Add a reference to the Sails app that loaded the module
module.sails = sails;
// Bind all methods to the module context
_.bindAll(module);
});
return cb(null, modules);
};
}


/**
* Load custom API responses.
*
* @param {Object} options
* @param {Function} cb
*/
exports.loadResponses = function (sails, cb) {
buildDictionary.optional({
dirname : path.resolve(__dirname + '/../responses'),
filter : /(.+)\.js$/,
useGlobalIdForKeyName: true
}, bindToSails(sails, cb));
};

然后,从我的钩子(Hook)定义中,我输入:
loadModules: function (cb) {
let hook = this;
moduleUtils.loadResponses(sails, function (err, responseDefs) {
if (err) return cb(err);
// Register responses as middleware
hook.middleware.responses = responseDefs;
return cb();
});
},

/**
* Shadow route bindings
* @type {Object}
*/
routes: {
before: {

/**
* Add custom response methods to `res`.
*
* @param {Request} req
* @param {Response} res
* @param {Function} next [description]
* @api private
*/
'all /*': function addResponseMethods(req, res, next) {
// Attach custom responses to `res` object
// Provide access to `req` and `res` in each of their `this` contexts.
_.each(sails.middleware.jsonapi.responses, function eachMethod(responseFn, name) {
sails.log.silly('Binding response ' + name + ' to ' + responseFn);
res[name] = _.bind(responseFn, {
req: req,
res: res,
});
});
// Proceed!
next();
}
}
}

在哪里 jsonapi是我的钩子(Hook)的名字。您可以在以下位置查看整个操作: https://github.com/IanVS/sails-hook-jsonapi/

关于sails.js - 在 Installable Hook 中定义自定义 API 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31736950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com