2021-02-25 18:20:52 +08:00

68 lines
1.7 KiB
TypeScript

import { Inject, Provide } from '@midwayjs/decorator';
import * as ipdb from 'ipip-ipdb';
import * as _ from 'lodash';
import { Context } from 'egg';
/**
* 帮助类
*/
@Provide()
export class Utils {
@Inject()
baseDir;
/**
* 获得请求IP
*/
async getReqIP(ctx: Context) {
const req = ctx.req;
return req.headers['x-forwarded-for'] || req.socket.remoteAddress.replace('::ffff:', '');
}
/**
* 根据IP获得请求地址
* @param ip 为空时则为当前请求的IP地址
*/
async getIpAddr(ctx: Context, ip?: string | string[]) {
try {
if (!ip) {
ip = await this.getReqIP(ctx);
}
const bst = new ipdb.BaseStation(`${this.baseDir}/app/comm/ipipfree.ipdb`);
const result = bst.findInfo(ip, 'CN');
const addArr: any = [];
if (result) {
addArr.push(result.countryName);
addArr.push(result.regionName);
addArr.push(result.cityName);
return _.uniq(addArr).join('');
}
// @ts-ignore
} catch (err) {
console.log(err)
return '无法获取地址信息';
}
}
/**
* 去除对象的空值属性
* @param obj
*/
async removeEmptyP(obj) {
Object.keys(obj).forEach(key => {
if (obj[key] === null || obj[key] === '' || obj[key] === 'undefined') {
delete obj[key];
}
});
}
/**
* 线程阻塞毫秒数
* @param ms
*/
sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
}