Абстрагирование суперагента
Наше приложение состоит из nodejs
, express
, reactjs
, а также newforms
, Для звонков на отдых мы используем:
var RestClient = require('superagent-ls')
И мы делаем звонки отдыха, как:
cleanBirthDate(callback) {
var {birthDate} = this.cleanedData
var formattedDob = moment (birthDate).format('DDMMYYYY')
RestClient.get(Global.getBirthDateServiceUrl() + '/' + formattedDob)
.end((err, res) => {
if (err) {
callback (err)
}
else if (res.clientError) {
var message = errorsMappingSwitch(res.body.error)
callback(null, forms.ValidationError(message))
}
else {
callback(null)
}
})
},
Мы хотим переместить RestClient
связанный код нашего собственного файла сказать RestCleint.js
а затем потребовать его и использовать его во всем приложении. Тем самым мы можем применить некоторый обобщенный код (например, обработку ошибок, ведение журнала, перенаправление на конкретные страницы ошибок в зависимости от кода ошибки) в одном месте.
Ценю любую помощь в этом направлении.
2 ответа
Я сделал то же самое, что вам нужно (даже с использованием суперагента). Я создал модули с кодом API в папке /utils и потребовал их, где это применимо. Для еще большей абстракции мы используем CoffeeScript для создания классов, которые наследуются от BaseAPIObject и вызываются с использованием чего-то вроде API.Posts.getAll(). End() и т. Д.
Эта статья очень помогла понять, как писать свои собственные модули: Экспортируйте это: Шаблоны проектирования интерфейса для модулей Node.js.
Вы всегда можете потребовать это как
RestClient.js
export default function callApi(callback) {
//your rest code
// use the callback here in the callback of your call.
}
app.js
import {callApi} from './RestClient';
callApi((err, result) => {
if (err) console.log(err)
});