您的位置:首页 > 其它

Connect中间件示例

2016-03-13 21:19 197 查看
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: