Connect中间件示例

server.js

var connect = require('connect');
var app = connect();
app.listen(3000);
app.use(logger)
	.use('/admin', restrict)		// 当.use()的第一个参数是一个字符串时,只有URL前缀与之匹配时,Connect才会调用后面的中间件
	.use('/admin', admin)
	.use(hello);

// 日志中间件
function logger(req, res, next) {
	console.log('%s %s', req.method, req.url);
	next();
}
// 添加中间件
//app.use(logger);

// 第二个中间件
function hello(req, res) {
	res.setHeader('Content-Type', 'text/plain');
	res.end('hello world');
}
//app.use(hello);


/* 挂载中间件 */
/* 当.use()的第一个参数是一个字符串时,只有URL前缀与之匹配时,Connect才会调用后面的中间件 */
// 实现HTTP Basic认证的中间件组件
function restricvart(req, res, next) {
	var authorization = req.headers.authorization;
	/* 用Error做参数调用next,相当于通知Connect程序中出现了错误 */
	/* 也就是对于这个HTTP请求而言,后续执行的中间件只有错误处理中间件 */
	if (!authorization) return next(new Error('Unauthorized'));

	var parts = authorization.split(' ');
	var scheme = parts[0];
	var auth = new Buffer(parts[1], 'base64').toString().split(':');
	var user = auth[0];
	var pass = auth[1];

	// 根据数据库中的记录检查认证信息的函数
	authenticateWithDatabase(user, pass, function(err) {
		if (err) return next(err);
		next();
	});
}

function admin(req, res, next) {
	/* 注意这里case中用的字符串是/和/users,而不是/admin和/admin/users */
	/* 因为在调用挂载的中间件之前,Connect从req.url中去掉了前缀 */
	switch (req.url) {
		case '/':
			res.end('try /users');
			break;
		case '/users':
			res.setHeader('Content-Type', 'application/json');
			res.end(JSON.stringify(['tobi', 'loki', 'jane']));
			break;
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的数据库加密中间件示例代码: ```python import sqlite3 from cryptography.fernet import Fernet class EncryptedDatabase: def __init__(self, db_file, key): self.db_file = db_file self.key = key self.fernet = Fernet(key) def connect(self): self.conn = sqlite3.connect(self.db_file) self.conn.row_factory = sqlite3.Row def close(self): self.conn.close() def execute(self, query, params=None): if params: params = [self.fernet.encrypt(str(p).encode()) for p in params] else: params = [] cursor = self.conn.cursor() cursor.execute(query, params) self.conn.commit() return cursor def fetchall(self, query, params=None): if params: params = [self.fernet.encrypt(str(p).encode()) for p in params] else: params = [] cursor = self.conn.cursor() cursor.execute(query, params) rows = cursor.fetchall() decrypted_rows = [] for row in rows: decrypted_row = {} for key, value in row.items(): decrypted_row[key] = self.fernet.decrypt(value).decode() decrypted_rows.append(decrypted_row) return decrypted_rows ``` 该中间件使用了Fernet加密算法来加密和解密数据库中的数据。在初始化时,需要传入一个数据库文件路径和一个加密密钥。连接数据库后,可以使用execute方法来执行任何SQL查询,该方法将自动加密查询中的参数。fetchall方法将返回所有结果,并将它们解密为Python字典。 请注意,这只是一个简单的示例,实际上在生产环境中需要更加严格的安全措施。例如,应该使用更强的加密算法和更复杂的密钥管理方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值