前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Express路由是如何实现的?

Express路由是如何实现的?

作者头像
越陌度阡
发布2020-11-26 14:51:23
9680
发布2020-11-26 14:51:23
举报

Express是一个极简的Node.js后端开发框架,它最强大的地方在于它的路由实现,那么它的路由是如何实现的呢?下面给大家分享两段代码,希望大家能够有个简单的认识。

首先是封装的路由模块

代码语言:javascript
复制
var url = require('url');

// 封装res.send()方法
function changeRes(res) {
    res.send = function (data) {
        res.writeHead(200, { "Content-Type": "text/html;charset='utf-8'" });
        res.end(data);
    }
};

// 定义主服务方法
var Server = function () {
    var G = this;
    // 处理GET和POST请求
    this._get = {};
    this._post = {};

    var app = function (req, res) {
        changeRes(res);
        // 获取路由
        var pathname = url.parse(req.url).pathname;
        // 处理URL路由,将结尾加上'/',与注册方法统一
        if (!pathname.endsWith('/')) {
            pathname = pathname + '/';
        };
        // 获取请求的方式,GET和POST请求
        var method = req.method.toLowerCase();
        // 判断方法是否存在
        if (G['_' + method][pathname]) {
            // 执行POST请求
            if (method == 'post') {
                var postStr = '';
                req.on('data', function (chunk) {
                    postStr += chunk;
                });
                req.on('end', function (err, chunk) {
                    req.body = postStr;
                    G['_' + method][pathname](req, res);
                });
                // 执行GET请求
            } else {
                G['_' + method][pathname](req, res);
            };
        } else {
            res.end('no router');
        };
    };
    // 定义一个GET方法为所有的GET请求注册
    app.get = function (string, callback) {
        // 将请所有注册路由前后加上'/'
        if (!string.endsWith('/')) {
            string = string + '/';
        };
        if (!string.startsWith('/')) {
            string = '/' + string;
        };
        G._get[string] = callback;
    };
    // 定义一个POST方法为所有的POST请求注册
    app.post = function (string, callback) {
        // 将请所有注册路由前后加上'/'
        if (!string.endsWith('/')) {
            string = string + '/';
        };
        if (!string.startsWith('/')) {
            string = '/' + string;
        };
        G._post[string] = callback;
    };
    return app;
}

module.exports = Server();

下面是引入路由并使用。

代码语言:javascript
复制
var http=require('http');
var ejs=require('ejs');
// 引入封装的路由
var app=require('express-route.js');
http.createServer(app).listen(3000);

// 注册首页的路由(方法)
app.get('/',function(req,res){
    var msg='这是数据库的数据'
    ejs.renderFile('views/index.ejs',{msg:msg},function(err,data){
        res.send(data);
    })
});

// 注册login的路由(方法)
app.get('/login',function(req,res){
    console.log('login');
    ejs.renderFile('views/form.ejs',{},function(err,data){
        res.send(data);
    })
});


// 注册dologin的路由(方法)
app.post('/dologin',function(req,res){
    console.log(req.body);  
    res.send("<script>alert('登录成功');history.back();</script>");
})
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档