在node.js模块导出中合并多个回调

在node.js模块导出中合并多个回调,node.js,callback,sails.js,Node.js,Callback,Sails.js,我有一个sails.js服务,它使用restler(restclient)调用外部api并获取数据 该模块如下所示: var rest = require('restler'); module.exports = { config: { url: sails.config.remote_api.base_url.concat('/countries'), rejectUnauthorized: sails.config.remote_api.valida

我有一个sails.js服务,它使用restler(restclient)调用外部api并获取数据

该模块如下所示:

var rest = require('restler');

module.exports = {
    config: {
        url: sails.config.remote_api.base_url.concat('/countries'),
        rejectUnauthorized: sails.config.remote_api.validateSsl,
        options: { 'Content-Type': 'application/json' }
    },
    find: function(headers, payload, callback) {
        var request = rest.get(this.config.url, this.config.options);
        sails.log.info('Outgoing Request', { log_id: headers[x - request - id], method: request.method, host: request.host, url: request.url });

        request.on('2XX', function(data, response) {
            callback(data, response);
        });
    }
}
在上面的代码中,request.on('2XX',…)处理响应代码在200系列中时发出的事件

当我们为响应代码在300、400、500系列中发出的事件添加其他处理程序时……这将为每个块创建相同回调函数的副本。例如

var rest = require('restler');
module.exports = {
    config: {
        url: sails.config.remote_api.base_url.concat('/countries'),
        rejectUnauthorized: sails.config.remote_api.validateSsl,
        options: { 'Content-Type': 'application/json' }
    },
    find: function(headers, payload, callback) {
        var request = rest.get(this.config.url, this.config.options);
        sails.log.info('Outgoing Request', { log_id: headers[x - request - id], method: request.method, host: request.host, url: request.url });

        request.on('2XX', function(data, response) {
            callback(data, response);
        });

        request.on('3XX', function(data, response) {
            callback(data, response);
        });

        request.on('4XX', function(data, response) {
            callback(data, response);
        });

        request.on('5XX', function(data, response) {
            data = {};
            data.succeeded = false;
            data.failureCode = 'SYSTEM ERROR';
            data.failureReason = 'A system error has occurred. Please try again. If the problem persists contact support';
            callback(data, response);
        });

        request.on('error', function(data, response) {
            data.succeeded = false;
            data.failureCode = 'SERVICE UNAVAILABLE';
            data.failureReason = 'The service is temporarily unavailable. Please try again later.';
            callback(data, response);
        });
    }
}
我们如何避免重复以下内容?

function(data, response) {
    callback(data, response);
}

不,你真的不应该。您基本上一直在处理不同的事件,如
2XX
3XX
等。每个事件都是单独处理的,这是一个很好的做法。任何简化都可能破坏整洁的设计

尽管您可以直接使用
回调
而不是

function(data, response) {
    callback(data, response);
}
像这样

request.on('2XX', callback);

我确实进行了upvote,但我的声誉很低,我的upvote没有显示。另请注意:如果module.exports具有多个具有重复代码块的函数,根据DRY原则,如何1。将此类重复代码分离为子函数2。如何从module.exports中调用子函数