| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 | /** * 日志业务逻辑模型 * * @author CaiAoLin * @date 2017/7/27 * @version */import BaseModel from "../../common/base/base_model";import LogType from "../../common/const/log_type_const";import mongoose from "mongoose";import UAParser from "ua-parser-js";import Request from "request";class LogModel extends BaseModel {    /**     * 构造函数     *     * @return {void}     */    constructor() {        let parent = super();        parent.model = mongoose.model('log');        parent.init();    }    /**     * 新增日志     *     * @param {String} userId     * @param {Number} type     * @param {String|Object} message     * @return {Promise}     */    addLog(userId, type, message) {        let result = null;        if (typeof message === 'string' && message === '') {            return result;        }        if (typeof message === 'object' && Object.keys(message).length <= 0) {            return result;        }        let addData = {            user_id: userId,            type: type,            message: message,            create_time: new Date().getTime()        };        result = this.db.create(addData);        return result;    }    /**     * 新增登录日志     *     * @param {String} userId     * @param {Object} request     * @return {Promise}     */    async addLoginLog(userId, request) {        let ip = request.connection.remoteAddress;        ip = ip?ip.split(':'):[];        ip = ip[3] === undefined ? '' : ip[3];        // let ipInfo = '127.0.0.1';//await this.getIpInfoFromApi(ip);        let ipInfo = await this.getIpInfoFromApi(ip);        let userAgentObject = new UAParser(request.headers['user-agent']);        let osInfo = userAgentObject.getOS();        let cpuInfo = userAgentObject.getCPU();        let browserInfo = userAgentObject.getBrowser();        let message = {            os: osInfo.name + ' ' + osInfo.version + ' ' + cpuInfo.architecture,            browser: browserInfo.name + ' ' + browserInfo.version,            ip: ip,            ip_info:ipInfo        };        return this.addLog(userId, LogType.LOGIN_LOG, message);    }    /**     * 获取log列表     *     * @param {String} userId     * @param {Number} type     * @param {Number} page     * @param {Number} pageSize     * @return {Promise}     */    async getLog(userId, type, page = 1, pageSize = 3) {        let condition = {            user_id: userId,            type: type        };        page = parseInt(page);        page = page <= 1 ? 1 : page;        let option = {pageSize: pageSize, offset: parseInt((page - 1) * pageSize), sort: {create_time:-1}};        let logList = await this.db.find(condition, null, option);        logList = logList.length > 0 ? logList : [];        return logList    }    /**     * 获取ip信息     *     * @param {String} ip     * @return {Promise}     */    async getIpInfoFromApi(ip) {        let result = '';        if (ip === '') {            return result;        }        if (ip === '127.0.0.1') {            return '服务器本机访问';        }        let getData = {            url: 'http://ip.taobao.com/service/getIpInfo.php?ip=' + ip,            encoding: 'utf8',            timeout:2000        };        return new Promise(function (resolve, reject) {            try {                // 请求接口                Request.get(getData, function (err, getResponse, body) {                    if (err) {                        //throw '请求错误';                        resolve("请求错误");                        return;                    }                    if (getResponse.statusCode !== 200) {                        resolve("获取数据失败!");                        return;                        //throw '获取数据失败!';                    }                    let responseData = JSON.parse(body);                    let ipData = responseData.data !== undefined ? responseData.data : [];                    if (ipData.ip === undefined) {                        resolve("接口数据有误,ip数据为空!");                        console.log(ipData);                        return;                        //throw '接口数据有误';                    }                    resolve(ipData.region + ipData.city + ' ' + ipData.isp);                });            } catch (error) {                reject([]);            }        });    }}export default LogModel;
 |