87 # express 应用和创建应用的分离

  1. 创建应用的过程和应用本身要进行分离。
  2. 路由和创建应用的过程也做一个分离。

下面实现创建应用的过程和应用本身要进行分离:

express.js

javascript 复制代码
const Application = require("./application");

function createApplication() {
    // 通过类来实现分离操作
    return new Application();
}

module.exports = createApplication;

每次创建一个应用,路由系统应该是毫无关系的,应该创建一个全新的路由系统

新建 application.js

javascript 复制代码
const http = require("http");
const url = require("url");

function Application() {
    this.routers = [
        {
            path: "*",
            method: "all",
            handler: (req, res) => {
                res.end(`kaimo-express Cannot ${req.method} ${req.url}`);
            }
        } // 默认路由
    ];
}

Application.prototype.get = function (path, handler) {
    this.routers.push({
        path,
        method: "get",
        handler
    });
};

Application.prototype.listen = function () {
    const server = http.createServer((req, res) => {
        const { pathname } = url.parse(req.url);
        const requestMethod = req.method.toLowerCase();
        for (let i = 1; i < this.routers.length; i++) {
            let { path, method, handler } = this.routers[i];
            if (path === pathname && method === requestMethod) {
                return handler(req, res);
            }
        }
        return this.routers[0].handler(req, res);
    });
    server.listen(...arguments);
};

module.exports = Application;

测试一下:

javascript 复制代码
const express = require("./kaimo-express");
const app = express();

// 调用回调时 会将原生的 req 和 res 传入(req,res 在内部也被扩展了)
// 内部不会将回调函数包装成 promise
app.get("/", (req, res) => {
    res.end("ok");
});

app.get("/add", (req, res) => {
    res.end("add");
});

app.listen(3000, () => {
    console.log(`server start 3000`);
    console.log(`在线访问地址:http://localhost:3000/`);
});
相关推荐
caridle3 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
胡西风_foxww5 天前
nodejs爬虫系统
爬虫·nodejs·node·系统·express·request·cheerio
松果猿8 天前
场地污染在线计算可视化平台,获得易智瑞GIS开发竞赛C组优胜奖,内附易智瑞GIS开发竞赛与全国大学生测绘学科创新创业智能大赛提交材料。
vue·express
js_user13 天前
在 Vue 渲染模板时,如何保留模板中的 HTML 注释?
开发语言·前端·javascript·css·vue.js·html·express
瑕、疵16 天前
使用Node.js和Express构建RESTful API
node.js·restful·express
js_user18 天前
css中,我想把文章的第一行设置单独的样式
开发语言·前端·javascript·css·node.js·css3·express
傻啦嘿哟22 天前
Plotly Express 详解:快速创建精美交互式可视化图表的最佳实践
信息可视化·plotly·express
坠入暮云间x1 个月前
微信小程序后台搭建—node+mysql
mysql·微信小程序·node.js·express
计算机程序设计开发1 个月前
Node.js+Express毕设论文选题最新推荐题目和方向
vue.js·node.js·课程设计·express·计算机毕业设计·计算机毕业论文
前端 贾公子1 个月前
Express内置的中间件(express.json和express.urlencoded)格式的请求体数据
中间件·json·express