nodejs实现黑名单中间件设计

2020-06-17 06:07:50易采站长站整理

黑名单Schema:



/**
 * Created by YCXJ-wanglihui on 2014/5/28.
 */
‘use strict’;


var mongoose = require(‘mongoose’);
var Schema = mongoose.Schema;


//1.短暂屏蔽 2.永久屏蔽
var degree = {TEMP:1, FOREVER:2};


/**
 * 黑名单
 * @type {Schema}
 *
 * @param ip {String} 黑名单Ip
 * @param createAt {Date} 创建时间
 * @param expireTime {Date} 如果是短暂屏蔽,屏蔽到期时间
 * @param forbiddenDegree {Number} 屏蔽级别 1.短暂屏蔽 2.永久屏蔽
 * @param reason {String} 屏蔽原因
 */
var BlackList = new Schema({
    ip:{
        type: String,
        index:true
    },
    createAt:{
        type: Date,
        default: Date.now
    },
    expireTime:{
        type: Date
    },
    forbiddenDegree:{
        type: Number,
        default:degree.TEMP
    },
    reason:{
        type: String,
        default: ‘请求次数频繁’
    }
});


mongoose.model(‘BlackList’, BlackList);


IP与提交记录Schema:



/**
 * Created by YCXJ-wanglihui on 2014/5/28.
 */


‘use strict’;


var mongoose = require(‘mongoose’);
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;


/**
 * 记录参与调查问卷的回复与Ip
 * @type {Schema}
 *
 * @param answerId {ObjectId} 回复Id
 * @param createAt {Date} 创建时间
 * @param ip {String} 参与回复的人Ip
 */
var IpAnswerLog = new Schema({
    answerId: {
        type: ObjectId
    },
    createAt: {
        type: Date,
        default:Date.now
    },
    ip:{
        type: String,
        index:true
    }
});


mongoose.model(‘IpAnswerLog’, IpAnswerLog);


相关Proxy代码:



/**
 * Created by YCXJ-wanglihui on 2014/5/28.
 */
‘use strict’;


var IpAnswerLog = require(‘../models’).IpAnswerLog;


/**
 * 新建并保存