您的位置:首页 > Web前端 > Node.js

Node.js学习-web框架-2-中间件

2017-11-24 17:47 477 查看
这一节我打算加个路由中间件,还是沿用上一节的项目,项目结构如下:

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