我有一个sails.js服务,该服务使用restler(rest-client)对外部api进行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
等等。每个事件都是单独处理的,这是一个好习惯。进一步的简化可能会损害整洁的设计。
虽然可以直接使用callback
代替
function(data, response) {
callback(data, response);
}
像这样
request.on('2XX', callback);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句