controller/index.js

124 lines
2.6 KiB
JavaScript
Raw Normal View History

2020-09-16 20:04:41 +08:00
/**
* 控制器基类
2020-09-24 19:57:01 +08:00
* @author yutent<yutent.io@gmail.com>
* @date 2020/09/24 15:45:17
2020-09-16 20:04:41 +08:00
*/
2020-09-25 18:33:09 +08:00
import { sha1 } from 'crypto.js'
2020-09-16 20:04:41 +08:00
export default class Controller {
2020-09-24 19:57:01 +08:00
// 初始化方法, 取代原先的构造方法
__f_i_v_e__(ctx, req, res) {
2020-09-20 23:11:03 +08:00
this.context = ctx
2020-09-16 20:04:41 +08:00
this.name = req.app
this.request = req
this.response = res
2020-09-24 19:57:01 +08:00
this.smarty = ctx.$$smarty
}
2020-09-16 20:04:41 +08:00
2020-09-24 19:57:01 +08:00
// 定义一个模板变量
assign(key, val) {
if (val === undefined || val === null) {
val = ''
}
key += ''
2020-09-16 20:04:41 +08:00
2020-09-24 19:57:01 +08:00
if (key && this.smarty) {
this.smarty.assign(key, val)
}
2020-09-16 20:04:41 +08:00
}
2020-09-24 19:57:01 +08:00
// 模板渲染, 参数是模板名, 可不带后缀, 默认是
render(file, noParse = false) {
if (this.smarty) {
this.smarty
.render(file, noParse)
.then(html => {
this.response.render(html)
})
.catch(err => {
this.response.error(err)
})
}
}
2020-09-16 20:04:41 +08:00
2020-09-25 18:33:09 +08:00
get jwt() {
var { enabled, ttl } = this.context.get('jwt')
var { mixKey } = this.request
if (enabled) {
var tmp = Object.create(null)
tmp.sign = data => this.context.$$jwt.sign(data, mixKey, ttl)
tmp.check = _ => {
var str = this.request.header('authorization')
if (str) {
return this.context.$$jwt.verify(str, mixKey)
}
}
return tmp
} else {
throw Error('Jwt was disabled.')
2020-09-24 19:57:01 +08:00
}
}
// cookie读写
cookie(key, val, opt) {
if (arguments.length < 2) {
return this.request.cookie(key)
}
if (!opt) {
opt = {}
}
opt.domain = opt.domain || this.context.get('domain')
if (val === null || val === undefined) {
delete opt.expires
opt.maxAge = -1
}
this.response.cookie(key, val, opt)
}
2020-09-24 19:57:01 +08:00
// 会话读写
session(key, val) {
2020-09-25 18:33:09 +08:00
var { enabled } = this.context.get('session')
var { ssid } = this.request
if (enabled) {
if (arguments.length < 2) {
// 这里返回的是Promise对象
return this.context.$$session.get(ssid, key)
}
key += ''
this.context.$$session.set(ssid, key, val)
} else {
throw Error('Session was disabled.')
2020-09-24 19:57:01 +08:00
}
}
// resfull-api规范的纯API返回
2020-09-16 20:04:41 +08:00
send(status = 200, msg = 'success', data = {}) {
if (typeof msg === 'object') {
data = msg
msg = 'success'
}
this.response.send(status, msg, data)
}
//针对框架定制的debug信息输出
xdebug(err) {
2020-09-20 23:11:03 +08:00
var msg = err
2020-09-24 19:57:01 +08:00
if (this.context.get('debug')) {
2020-09-20 23:11:03 +08:00
msg = err.message || err
2020-09-16 20:04:41 +08:00
}
2020-09-20 23:11:03 +08:00
msg = encodeURIComponent(msg + '')
this.response.append('X-debug', msg)
2020-09-16 20:04:41 +08:00
}
}