goldpankit
Version:
GoldPanKit是一款极速研发套件,可在套件中快速构建各类技术框架和项目。开源作者可发布自己的项目,并为其设定金额,实现开源项目的盈利。
84 lines (79 loc) • 1.8 kB
JavaScript
var express = require('express');
var router = express.Router();
const request = require('./request.axios')
const cache = require('../core/utils/cache')
const log = require('../core/utils/log')
class Request {
#url;
#methods;
constructor(url, methods) {
this.#url = url
this.#methods = methods
}
// 定义
data (callback) {
router[this.#methods](this.#url, (req, res, next) => {
try {
// 存储请求头到缓存中
cache.set('request_headers', req.headers)
cache.set('request_lang', req.headers['x-lang'])
let result = callback
if (typeof callback === 'function') {
result = callback(req)
}
// 结果为Promise
if (result instanceof Promise) {
result
.then(data => {
res.send(this.#buildSuccess(data));
})
.catch(e => {
res.send(this.#buildError(e))
})
return
}
// 结果为非Promise
res.send(this.#buildSuccess(result));
} catch (e) {
console.error(e)
res.send(this.#buildError(e));
throw e
}
})
}
#buildSuccess(data) {
return {
code: 200,
success: true,
data,
message: null
}
}
#buildError(e) {
let message = e
if (typeof e !== 'string') {
message = e.message
// 读取i18n消息
if (message.withI18n === true) {
message = message['zh']
}
}
log.error(message)
return {
code: e.code || 500,
success: false,
data: null,
errorData: e.errorData,
message
}
}
}
module.exports = {
router,
get (url) {
return new Request(url, 'get')
},
post (url) {
return new Request(url, 'post')
}
}