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

这一节我打算加个路由中间件,还是沿用上一节的项目,项目结构如下:

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的原型中我们添加两个基本方法既getpost方法分别用于接受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!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值