美文网首页
Node.js - 封装类似Express的路由

Node.js - 封装类似Express的路由

作者: 饮杯梦回酒 | 来源:发表于2019-03-16 21:13 被阅读0次

导读:

  • 先通过封装 Express 路由模块然后导出到主入口文件,主入口文件直接注册即可调用。
  • 目录结构如下:


    涉及文件

结果展示:

首页.png
登录页.png
注册页.png
新闻页.png

封装代码:

  • express_route.js (路由文件)
const url = require('url')

//封装方法改变res  绑定res.send()
let changeRes = (res) => {

    res.send = (data) => {

        res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'})

        res.end(data)
    }
}

// 暴露的module
let Server = () => {

    let G = this   // 全局变量

    // 处理 get和post 请求
    this._get = {}
    this._post = {}

    let app = (req, res) => {

        changeRes(res)

        // 获取路由
        let pathName =  url.parse(req.url).pathname 

        if(!pathName.endsWith('/')) pathName += '/'

        // 获取请求的的方式
        let method = req.method.toLowerCase()

        // 如果注册了相应请求的相应方法
        if(G['_' + method][pathName]) {

            // 如果是 post 请求
            if(method === 'post') {

                let postStr = ''

                req.on('data', (chunk) => { 

                    postStr += chunk

                })

                req.on('end', (err, chunk) => {

                    req.body = postStr   // 表示拿到post的值

                    G['_' + method][pathName](req, res)  // 执行方法

                })

            } else {

                G['_' + method][pathName](req, res)  // 执行方法

            }

        } else {

            res.end('no router')
        }

    }

    // 绑定 app.get和app.post 方法
    app.get = (string, callback) => {

        if(!string.endsWith('/')) {
            string = string + '/'
        }
        if(!string.startsWith('/')) {
            string = '/' + string
        }

        G._get[string] = callback

    }

    app.post = (string, callback) => {

        if(!string.endsWith('/')) {
            string = string + '/'
        }
        if(!string.startsWith('/')) {
            string = '/' + string
        }

        G._post[string] = callback

    }

    return app

}

module.exports = Server()

  • express_module.js (入口文件,注册路由即可调用)
const http = require('http')
const ejs = require('ejs')
const app = require('./express_route.js')


// 只要有请求,就会触发app里的方法
http.createServer(app).listen(3000)


// 注册根路由
app.get('/', (req, res) => {

    var msg='这是首页'

    ejs.renderFile('./index.ejs', { msg: msg }, (err, data) => {

        res.send(data)
    })
})

// 登录页面
app.get('/login', (req, res) => {

    console.log('login')

    ejs.renderFile('./form.ejs', {}, (err, data) => {

        res.send(data)
    })
})

// 执行登录
app.post('/dologin', (req, res) => {

    console.log(req.body)  /*获取post传过来的数据*/

    res.send("<script>alert('登录成功');history.back();</script>")
})

// 注册页面
app.get('/register', (req, res) => {

    console.log('register')

    res.send('register')
})

// 新闻页面
app.get('/news', (req, res) => {

    console.log('register')

    res.send('新闻数据')
})

  • 其余文件
    可能大家也比较好奇其他文件,ejs 主要是后台模板渲染引擎,渲染HTML页面用的。

总结:

  • 其实学框架最根本就在掌握其设计原理,如果小伙伴在学习Node.js,不妨尝试动手封装一个类似 Express 路由的功能,这对你今后开发对于路由的理解一定会很有帮助的,剩下自行体会!

相关文章

  • Node.js - 封装类似Express的路由

    导读: 先通过封装 Express 路由模块然后导出到主入口文件,主入口文件直接注册即可调用。 目录结构如下:涉及...

  • node学习4

    Nodejs 路由模块封装、封装仿照 express 的路由 Nodejs 路由模块封装 封装仿照 express...

  • node.js 学习笔记 05

    ejs 的使用 express 框架 express 是一个包,是封装了 node.js 一些功能的包,类似jQu...

  • NodeJS框架Express与Koa

    Express 是一个Node.js的基础框架,主要基于 Connect 中间件,并且自身封装了路由(需要配合bo...

  • 基于Node.js的Express框架

    一、什么是Express Express基于Node.js封装的,快速、开放、极简的 Node.js Web 开发...

  • express 路由封装

  • express框架

    「express」基于node.js后端框架,负责路由,业务逻辑,数据库操作,页面和数据响应。 使用express...

  • Express-node项目流

    Express,高度包容、快速而极简的 Node.js Web 框架 主要有: 路由 (请求网站任何东西,都是路由...

  • Express的使用整理

    express是基于node.js的web开发框架 express有4个核心,分别是中间件,路由,子应用,易用的A...

  • koa.js的使用(koa2)

    koa与Express简单比较Express connect 中间件 封装了 路由、视图,koa co中间件 不包...

网友评论

      本文标题:Node.js - 封装类似Express的路由

      本文链接:https://www.haomeiwen.com/subject/kqhdmqtx.html