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; } }
相关文章推荐
- 测试思考
- 判断是否为平衡二叉树--递归法
- 这段代码在32位计算机上的执行结果是什么?
- HTTP请求和数据安全
- HDU 2187
- 关系模型之关系代数
- mapreduce的shuffle阶段详解
- HDU 1423 —— Greatest Common Increasing Subsequence
- iOS开发UI篇—核心动画(基础动画)
- 从AlphaGO的胜利来看人类趋势
- Python设计模式(3)-工厂方法模式
- C++11 半同步半异步线程池的实现
- css基本语法
- 记录
- 写一个语句实现x是否为2的若干次幂的判断
- 使用dex2jar反编译apk
- 交换两个数的值,不引用第三个变量
- 指针与数组的区别详解
- 1064. Complete Binary Search Tree (30)
- XML的解析方式