Connect中间件示例

来源:互联网 发布:mac air摄像头打不开 编辑:程序博客网 时间:2024/05/21 01:31

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
原创粉丝点击