Node.js学习-web框架-2-中间件
2017-11-24 17:47
477 查看
这一节我打算加个路由中间件,还是沿用上一节的项目,项目结构如下:
在上面的文件夹中,wa/middleware/router下就存放了与路由中间件相关的文件。
在开始代码之前,先想一下路由中间件应具有哪些方法。好了,既然是路由,那么肯定要能:
1. 识别请求方法,如GET请求或POST请求。
2. 识别请求路径
以上两个条件是我们必须要满足的,那我接下来我们开始写代码:
这上面的代码中我们定义了一个
在
当然这个路由器还相当简单,我们之后会对其进行扩展。
接下来我们来检测一下这个中间件是否可行,在项目中添加如下文件:
在
接下来修改wa/app.js如下:
到此为止值我们这个简单的路由中间件就已经基本完成了,但是大家可以注意到上面我们只添加了GET请求当时的路由。
这里并不是说POST请求的路由不能用,这里是可用的,但是我们留到下一节,写一个解析请求参数的中间件并做一个登录的例子再做了.
BYEBYE!
wa |--core |--wa.js |-controller | |-middleware |--router |--index.js |-public | |-app.js
在上面的文件夹中,wa/middleware/router下就存放了与路由中间件相关的文件。
在开始代码之前,先想一下路由中间件应具有哪些方法。好了,既然是路由,那么肯定要能:
1. 识别请求方法,如GET请求或POST请求。
2. 识别请求路径
以上两个条件是我们必须要满足的,那我接下来我们开始写代码:
const url = require('url'); var routeArray = []; /** * 路由构造函数 */ function waRoute() { if (!(this instanceof waRoute)) { return new waRoute(); } return this; } waRoute.prototype = { get: function(pathname,fn) { this.createRoute('GET',pathname,fn); return this; }, post: function(pathname,fn) { this.createRoute('POST',pathname,fn); return this; }, createRoute: function(requestMethod,pathname,callback) { var routeObj = { requestMethod: requestMethod, pathname: pathname, callback: callback } routeArray.push(routeObj); }, /** * 供wa使用的中间件 */ routes: function(wa) { var urlObj = url.parse(wa.req.url); for (var i = 0; i < routeArray.length; i++) { var route = routeArray[i]; if (wa.req.method === route.requestMethod && route.pathname === urlObj.pathname) { route.callback(wa); return; } } } } module.exports = waRoute;
这上面的代码中我们定义了一个
routeArray用于存放每一次加入的路由实例。
在
waRoute的原型中我们添加两个基本方法既
get与
post方法分别用于接受GET请求与POST请求,另外一个
createRoute是统一创建路由的工具方法。
routes方法则是我们对外(wa)使用的中间件了,在这个方法中我们我们做的就是遍历我们的路由实例数组,之后调用回调函数做出相应。
当然这个路由器还相当简单,我们之后会对其进行扩展。
接下来我们来检测一下这个中间件是否可行,在项目中添加如下文件:
wa |-controller |--IndexController.js |-public |--index.html |--login.html
wa/controller/IndexController.js的内容如下:
const path = require('path'); var IndexController = { index: function(wa) { wa.render(path.resolve(__dirname,'../public/index.html')); }, login: function(wa) { wa.render(path.resolve(__dirname,'../public/login.html')); } } module.exports = IndexController;
在
wa/public/(login.html,index.html)中随便加点什么用以标识文件即可。
接下来修改wa/app.js如下:
const Wa = require('./core/wa'); const waRoute = require('./middleware/router/index')(); const IndexController = require('./controller/IndexController'); var app = new Wa(); //添加路由实例 waRoute.get('/',IndexController.index) .get('/login',IndexController.login); //使用路由中间件 app.use(waRoute.routes); //监听端口 app.listen(8080);
到此为止值我们这个简单的路由中间件就已经基本完成了,但是大家可以注意到上面我们只添加了GET请求当时的路由。
这里并不是说POST请求的路由不能用,这里是可用的,但是我们留到下一节,写一个解析请求参数的中间件并做一个登录的例子再做了.
BYEBYE!
相关文章推荐
- Node.js学习-一步步完善一个web框架-1
- JavaScript之node.js-web框架Koa学习
- Koa – 更加强大的下一代 Node.js Web 框架
- node.js学习(六、express创建web服务器)
- 【《Node.js 实战》学习思维导图】第7章 Connect自带的中间件
- 学习用node.js建立一个简单的web服务器
- 十大 Node.js 的 Web 框架(快速提升工作效率)
- Node.js Web框架之Express
- 如何选择Node.js Web开发框架?
- Node.js Web 开发框架大全《路由篇》
- Node.js Web 开发框架大全《中间件篇》
- 关于node.js的web框架的应用及并发性能测试 推荐
- 如何选择Node.js Web开发框架?
- node.js Express框架学习笔记
- node.js web应用基本框架
- Node.js Express 框架学习
- 从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
- 基于Node.js的Web框架集合
- Vue.js学习 Item16 – 各种Web流行MV*框架对比
- 浅谈Node.js轻量级Web框架Express4.x使用指南