Ich habe einen sails.js-Dienst, der Restore (Rest-Client) verwendet, um API-Aufrufe an externe API und holen Daten zu machen.Konsolidieren Sie mehrere Rückrufe in node.js Modul exportiert
Das Modul sieht wie folgt aus:
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);
});
}
}
In dem obigen Code request.on ('2XX', ...) behandelt das emittierte Ereignis, wenn Antwortcode in der 200-Serie.
Wenn wir weitere Handler für Ereignisse hinzufügen, die ausgegeben werden, wenn der Antwortcode 300, 400, 500 ist, wird eine Duplikation der gleichen Callback-Funktion für jeden der Blöcke erzeugt. Für z.B.
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);
});
}
}
Wie vermeiden wir die Vervielfältigung der folgenden Zeilen?
function(data, response) {
callback(data, response);
}
Dank sehr verwenden können. Das vereinfacht den Code sehr. –
Ich habe Upvote gemacht, aber mein Ruf ist niedrig, mein Upvote wurde nicht angezeigt. –
Auf eine separate Anmerkung: Wenn ein Modul.exports mehrere Funktionen hat, die sich wiederholende Codeblöcke haben, wie nach DRY-Prinzip, wie man 1. einen solchen wiederholenden Code in eine Unterfunktion trennt 2. wie man eine Unterfunktion innerhalb von module.exports aufruft –