UNPKG

pvmed-server-libs

Version:

pvmed server libs

119 lines (116 loc) 2.87 kB
const request = require('request-promise') const BaseError = require('../exceptions/base_error') const HttpStatusCode = require('../constants/http_status_code') class RemoteAPIError extends BaseError { constructor(name, code, msg) { super(code, `远程调用${name}出现错误:${msg}`) } } class RemoteAPI { constructor(name, baseUrl, globalOpts = {}) { this.name = name this.baseUrl = baseUrl this.globalOpts = globalOpts this.request = request.defaults(this.globalOpts) } setGlobalOpts(globalOpts = {}) { this.request = request.defaults(globalOpts) } async handleResponse(resp) { try { if (resp.code == 200) { return resp.data } else { throw new RemoteAPIError(this.name, resp.code, resp.message) } } catch (e) { if (e instanceof RemoteAPIError) { throw e } else { throw new RemoteAPIError(this.name, HttpStatusCode.HTTP_INTERNAL_SERVER_ERROR, e.message) } } } async postForm(path, formData = {}, opts = { filter: true }) { const resp = await this.request.post({ baseUrl: this.baseUrl, uri: path, formData: formData, json: true, ...opts }) if (opts.filter === true) { return this.handleResponse(resp) } return resp } async putForm(path, formData = {}, opts = { filter: true }) { const resp = await this.request.put({ baseUrl: this.baseUrl, uri: path, formData: formData, json: true, ...opts }) if (opts.filter === true) { return this.handleResponse(resp) } return resp } async postJson(path, json = {}, opts = { filter: true }) { const resp = await this.request.post({ baseUrl: this.baseUrl, uri: path, body: json, json: true, ...opts }) if (opts.filter === true) { return this.handleResponse(resp) } return resp } async putJson(path, json = {}, opts = { filter: true }) { const resp = await this.request.put({ baseUrl: this.baseUrl, uri: path, body: json, json: true, ...opts }) if (opts.filter === true) { return this.handleResponse(resp) } return resp } async delete(path, qs = {}, opts = { filter: true }) { const resp = await this.request.delete({ baseUrl: this.baseUrl, uri: path, qs: qs, json: true, ...opts }) if (opts.filter === true) { return this.handleResponse(resp) } return resp } async get(path, qs = {}, opts = { filter: true }) { const resp = await this.request.get({ baseUrl: this.baseUrl, uri: path, qs: qs, json: true, ...opts }) if (opts.filter === true) { return this.handleResponse(resp) } return resp } } module.exports = { RemoteAPIError, RemoteAPI }