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;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值