Абстрагирование суперагента

Наше приложение состоит из 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)
});
Другие вопросы по тегам