lin-mizar
Version:
The core library of Lin CMS
283 lines (282 loc) • 7.68 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.LimitException = exports.FileExtensionException = exports.FileTooManyException = exports.FileTooLargeException = exports.RefreshException = exports.MethodNotAllowed = exports.Forbidden = exports.RepeatException = exports.UnknownException = exports.ExpiredTokenException = exports.InvalidTokenException = exports.ParametersException = exports.NotFound = exports.AuthFailed = exports.Failed = exports.Success = exports.HttpException = void 0;
const tslib_1 = require("tslib");
const assert_1 = tslib_1.__importDefault(require("assert"));
const lodash_1 = require("lodash");
const config_1 = require("../config");
const CodeMessage = config_1.config.getItem('codeMessage', {});
if (CodeMessage && !lodash_1.isFunction(CodeMessage.getMessage)) {
throw new Error('CodeMessage.getMessage() must be implemented');
}
/**
* HttpException 是lin中所有其他异常的基类
*
* ```js
* // 实例化一个默认的HttpException
* const ex = new HttpException();
*
* // 实例化一个带参的HttpException
* // 如果只传 code 会通过 CodeMessage.getMessage(code) 方法获取 message
* const ex = new HttpException({ code: 10010 });
*
* // 也可以是其他参数
* const ex = new HttpException({ message: CodeMessage.getMessage(10010) });
*
* // 也可以指定所有参数
* const ex = new HttpException({ code: 10010, message: CodeMessage.getMessage(10010) });
*
* // 也可以只穿一个 code 作为参数
* // 如果只传 code 会通过 CodeMessage.getMessage(code) 方法获取 message
* const ex = new HttpException(10010)
* ```
*/
class HttpException extends Error {
/**
* 构造函数
* @param ex 可选参数,通过{}的形式传入 / 也可以直接传 code
*/
constructor(ex) {
super();
/**
* http 状态码
*/
this.status = 500;
/**
* 返回的信息内容
*/
this.message = CodeMessage.getMessage(9999);
/**
* 特定的错误码
*/
this.code = 9999;
this.fields = ['message', 'code'];
this.exceptionHandler(ex);
}
exceptionHandler(ex) {
// 可以直接传一个 code
if (lodash_1.isInteger(ex)) {
this.code = ex;
this.message = CodeMessage.getMessage(ex);
return;
}
if (ex && ex.code) {
assert_1.default(lodash_1.isInteger(ex.code));
const code = ex.code;
this.code = code;
this.message = CodeMessage.getMessage(code);
}
if (ex && ex.message) {
this.message = ex.message;
}
}
}
exports.HttpException = HttpException;
/**
* 成功
*/
class Success extends HttpException {
constructor(ex) {
super();
this.status = 201;
this.message = CodeMessage.getMessage(0);
this.code = 0;
this.exceptionHandler(ex);
}
}
exports.Success = Success;
/**
* 失败
*/
class Failed extends HttpException {
constructor(ex) {
super();
this.status = 400;
this.message = CodeMessage.getMessage(9999);
this.code = 9999;
this.exceptionHandler(ex);
}
}
exports.Failed = Failed;
/**
* 认证失败
*/
class AuthFailed extends HttpException {
constructor(ex) {
super();
this.status = 401;
this.message = CodeMessage.getMessage(10000);
this.code = 10000;
this.exceptionHandler(ex);
}
}
exports.AuthFailed = AuthFailed;
/**
* 资源不存在
*/
class NotFound extends HttpException {
constructor(ex) {
super();
this.status = 404;
this.message = CodeMessage.getMessage(10020);
this.code = 10020;
this.exceptionHandler(ex);
}
}
exports.NotFound = NotFound;
/**
* 参数错误
*/
class ParametersException extends HttpException {
constructor(ex) {
super();
this.status = 400;
this.message = CodeMessage.getMessage(10030);
this.code = 10030;
this.exceptionHandler(ex);
}
}
exports.ParametersException = ParametersException;
/**
* 令牌失效或损坏
*/
class InvalidTokenException extends HttpException {
constructor(ex) {
super();
this.status = 401;
this.message = CodeMessage.getMessage(10040);
this.code = 10040;
this.exceptionHandler(ex);
}
}
exports.InvalidTokenException = InvalidTokenException;
/**
* 令牌过期
*/
class ExpiredTokenException extends HttpException {
constructor(ex) {
super();
this.status = 422;
this.message = CodeMessage.getMessage(10050);
this.code = 10050;
this.exceptionHandler(ex);
}
}
exports.ExpiredTokenException = ExpiredTokenException;
/**
* 服务器未知错误
*/
class UnknownException extends HttpException {
constructor(ex) {
super();
this.status = 400;
this.message = CodeMessage.getMessage(9999);
this.code = 9999;
this.exceptionHandler(ex);
}
}
exports.UnknownException = UnknownException;
/**
* 字段重复
*/
class RepeatException extends HttpException {
constructor(ex) {
super();
this.status = 400;
this.message = CodeMessage.getMessage(10060);
this.code = 10060;
this.exceptionHandler(ex);
}
}
exports.RepeatException = RepeatException;
/**
* 禁止操作
*/
class Forbidden extends HttpException {
constructor(ex) {
super();
this.status = 403;
this.message = CodeMessage.getMessage(10070);
this.code = 10070;
this.exceptionHandler(ex);
}
}
exports.Forbidden = Forbidden;
/**
* 请求方法不允许
*/
class MethodNotAllowed extends HttpException {
constructor(ex) {
super();
this.status = 405;
this.message = CodeMessage.getMessage(10080);
this.code = 10080;
this.exceptionHandler(ex);
}
}
exports.MethodNotAllowed = MethodNotAllowed;
/**
* refresh token 获取失败
*/
class RefreshException extends HttpException {
constructor(ex) {
super();
this.status = 401;
this.message = CodeMessage.getMessage(10100);
this.code = 10100;
this.exceptionHandler(ex);
}
}
exports.RefreshException = RefreshException;
/**
* 文件体积过大
*/
class FileTooLargeException extends HttpException {
constructor(ex) {
super();
this.status = 413;
this.message = CodeMessage.getMessage(10110);
this.code = 10110;
this.exceptionHandler(ex);
}
}
exports.FileTooLargeException = FileTooLargeException;
/**
* 文件数量过多
*/
class FileTooManyException extends HttpException {
constructor(ex) {
super();
this.status = 413;
this.message = CodeMessage.getMessage(10120);
this.code = 10120;
this.exceptionHandler(ex);
}
}
exports.FileTooManyException = FileTooManyException;
/**
* 文件扩展名不符合规范
*/
class FileExtensionException extends HttpException {
constructor(ex) {
super();
this.status = 406;
this.message = CodeMessage.getMessage(10130);
this.code = 10130;
this.exceptionHandler(ex);
}
}
exports.FileExtensionException = FileExtensionException;
/**
* 请求过于频繁,请稍后重试
*/
class LimitException extends HttpException {
constructor(ex) {
super();
this.status = 401;
this.message = CodeMessage.getMessage(10140);
this.code = 10140;
this.exceptionHandler(ex);
}
}
exports.LimitException = LimitException;