servds / src /lib /request /Request.ts
ffreemt
Update local files instead of git clone
813eca2
raw
history blame
No virus
2.13 kB
import _ from 'lodash';
import APIException from '@/lib/exceptions/APIException.ts';
import EX from '@/api/consts/exceptions.ts';
import logger from '@/lib/logger.ts';
import util from '@/lib/util.ts';
export interface RequestOptions {
time?: number;
}
export default class Request {
/** 请求方法 */
method: string;
/** 请求URL */
url: string;
/** 请求路径 */
path: string;
/** 请求载荷类型 */
type: string;
/** 请求headers */
headers: any;
/** 请求原始查询字符串 */
search: string;
/** 请求查询参数 */
query: any;
/** 请求URL参数 */
params: any;
/** 请求载荷 */
body: any;
/** 上传的文件 */
files: any[];
/** 客户端IP地址 */
remoteIP: string | null;
/** 请求接受时间戳(毫秒) */
time: number;
constructor(ctx, options: RequestOptions = {}) {
const { time } = options;
this.method = ctx.request.method;
this.url = ctx.request.url;
this.path = ctx.request.path;
this.type = ctx.request.type;
this.headers = ctx.request.headers || {};
this.search = ctx.request.search;
this.query = ctx.query || {};
this.params = ctx.params || {};
this.body = ctx.request.body || {};
this.files = ctx.request.files || {};
this.remoteIP = this.headers["X-Real-IP"] || this.headers["x-real-ip"] || this.headers["X-Forwarded-For"] || this.headers["x-forwarded-for"] || ctx.ip || null;
this.time = Number(_.defaultTo(time, util.timestamp()));
}
validate(key: string, fn?: Function) {
try {
const value = _.get(this, key);
if (fn) {
if (fn(value) === false)
throw `[Mismatch] -> ${fn}`;
}
else if (_.isUndefined(value))
throw '[Undefined]';
}
catch (err) {
logger.warn(`Params ${key} invalid:`, err);
throw new APIException(EX.API_REQUEST_PARAMS_INVALID, `Params ${key} invalid`);
}
return this;
}
}