From 6961159da2590c83da12ff5d8e2970770a7f2d5b Mon Sep 17 00:00:00 2001 From: batkor Date: Sun, 24 Mar 2019 15:28:39 +0800 Subject: [PATCH] add fetch instead https --- example.js | 5 ++- index.js | 120 ++++++++++++++++++++++++++++++++--------------------- 2 files changed, 76 insertions(+), 49 deletions(-) diff --git a/example.js b/example.js index f4dec25..cac1298 100644 --- a/example.js +++ b/example.js @@ -4,7 +4,10 @@ const Dadata = require('./index'); const dadata = new Dadata(API_KEY); dadata.bank({ query: 'сбербанк' }) + .then(function (response) { + return response.json(); + }) .then((data) => { console.log(data); }) - .catch(console.error); + .catch(console.error); \ No newline at end of file diff --git a/index.js b/index.js index b7e73d8..49f6459 100644 --- a/index.js +++ b/index.js @@ -1,7 +1,8 @@ 'use strict'; -const https = require('https'); -/** Dadata API class */ +/** + * Dadata API class + */ class Dadata { /** * API constructor @@ -11,92 +12,105 @@ class Dadata { this.apiKey = apiKey; } + /** + * Возращает путь для запроса в DadataApi в зависимости от параметра. + * + * @param api + * @returns {string} + * @private + */ + _path(api) { + return `https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/${api}`; + } + + /** + * Возвращает заголовок для запроса. + * + * @returns {{Authorization: string, Accept: string, "Content-Type": string}} + * @private + */ + _headers() { + return { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + 'Authorization': `Token ${this.apiKey}` + }; + } + /** * Клиент + * * @private * @param {string} api Название метода * @param {params} params Параметры * @returns {promise} */ _client(api, params) { - const request = Object.assign({ + let request = Object.assign({ count: 10 }, params); - const options = { + let options = { method: 'POST', - hostname: 'suggestions.dadata.ru', - path: `/suggestions/api/4_1/rs/suggest/${api}`, - port: 443, - headers: { - 'Content-Type': 'application/json', - 'Accept': 'application/json', - 'Authorization': `Token ${this.apiKey}` - } + headers: this._headers(), + body: JSON.stringify(request) }; - return new Promise((resolve, reject) => { - const req = https.request(options, (res) => { - let result = ''; - if (res.statusCode !== 200) { - return reject({ - code: res.statusCode, - message: 'HTTP Error: bad status code' - }); - } - res.on('data', (chunk) => { - result += chunk; - }); - res.on('end', () => { - try { - result = JSON.parse(result); - } catch (err) { - return reject(err); - } - resolve(result); - }); - }); - req.on('error', reject); - req.write(JSON.stringify(request)); - req.end(); - }); + return fetch(this._path(api), options); } + /** * Подсказки по ФИО + * * @see {@link https://confluence.hflabs.ru/pages/viewpage.action?pageId=502038691|Документация} + * * @param {object} params Параметры * @param {string} params.query Запрос * @param {number} [params.count=10] Кол-во возвращаемых результатов - * @param {string[]} [params.parts=null] Подсказки по части ФИО (NAME, SURNAME, PATRONYMIC) + * @param {string[]} [params.parts=null] Подсказки по части ФИО (NAME, + * SURNAME, PATRONYMIC) * @param {string} [params.gender=UNKNOWN] Пол * @return {promise} */ fio(params) { return this._client('fio', params) } + /** * Подсказки по адресу + * * @see {@link https://confluence.hflabs.ru/pages/viewpage.action?pageId=502038680|Документация} * @param {object} params Параметры * @param {string} params.query Запрос * @param {number} [params.count=10] Кол-во возвращаемых результатов * @param {object} [params.locations=] Ограничение поиска адреса - * @param {number} params.location.region_fias_id Ограничение по ФИАС коду региона - * @param {number} params.location.area_fias_id Ограничение по ФИАС коду области - * @param {number} params.location.city_fias_id Ограничение по ФИАС коду города - * @param {number} params.location.settlement_fias_id Ограничение по ФИАС коду населенного пункта - * @param {number} params.location.street_fias_id Ограничение по ФИАС коду улицы + * @param {number} params.location.region_fias_id Ограничение по ФИАС коду + * региона + * @param {number} params.location.area_fias_id Ограничение по ФИАС коду + * области + * @param {number} params.location.city_fias_id Ограничение по ФИАС коду + * города + * @param {number} params.location.settlement_fias_id Ограничение по ФИАС + * коду населенного пункта + * @param {number} params.location.street_fias_id Ограничение по ФИАС коду + * улицы * @return {promise} */ address(params) { return this._client('address', params) } + /** * Подсказки по организациям + * * @see {@link https://confluence.hflabs.ru/pages/viewpage.action?pageId=502038697|Документация} + * * @param {object} params Параметры * @param {string} params.query Запрос * @param {number} [params.count=10] Кол-во возвращаемых результатов - * @param {string[]} [params.status=null] Фильтр по статусу организации (ACTIVE - активные, LIQUIDATING - ликвидируемые, LIQUIDATED - ликвидированные) - * @param {string} [params.type=null] Фильтр по юридическим лицам (LEGAL) или индивидуальным предпринимателям (INDIVIDUAL) + * @param {string[]} [params.status=null] Фильтр по статусу организации + * (ACTIVE - активные, LIQUIDATING - ликвидируемые, LIQUIDATED - + * ликвидированные) + * @param {string} [params.type=null] Фильтр по юридическим лицам (LEGAL) или + * индивидуальным предпринимателям (INDIVIDUAL) * @param {object[]} params.locations Фильтр по региону * @param {number} params.locations.kladr_id Двухзначный код региона по КЛАДР * @return {promise} @@ -104,22 +118,32 @@ class Dadata { party(params) { return this._client('party', params) } + /** * Подсказки по банкам + * * @see {@link https://confluence.hflabs.ru/pages/viewpage.action?pageId=502038711|Документация} + * * @param {object} params Параметры * @param {string} params.query Запрос * @param {number} [params.count=10] Кол-во возвращаемых результатов - * @param {string[]} [params.status=null] Фильтр по статусу (ACTIVE - активные, LIQUIDATING - ликвидируемые, LIQUIDATED - ликвидированные) - * @param {string} [params.type=null] Фильтр по типу банковской организации BANK - банк, NKO - небанковская кредитная организация, BANK_BRANCH - филиал банка, NKO_BRANCH - филиал небанковской кредитной организации, RKC - РКЦ / ГРКЦ, OTHER - другое + * @param {string[]} [params.status=null] Фильтр по статусу (ACTIVE - + * активные, LIQUIDATING - ликвидируемые, LIQUIDATED - ликвидированные) + * @param {string} [params.type=null] Фильтр по типу банковской организации + * BANK - банк, NKO - небанковская кредитная организация, BANK_BRANCH - + * филиал банка, NKO_BRANCH - филиал небанковской кредитной организации, + * RKC - РКЦ / ГРКЦ, OTHER - другое * @return {promise} */ bank(params) { return this._client('bank', params) } + /** * Подсказки по email + * * @see {@link https://confluence.hflabs.ru/pages/viewpage.action?pageId=502038705|Документация} + * * @param {object} params Параметры * @param {string} params.query Запрос * @param {number} [params.count=10] Кол-во возвращаемых результатов @@ -130,4 +154,4 @@ class Dadata { } } -module.exports = Dadata; +export default Dadata;