手写Express核心原理,再也不怕面试官问我Express原理

本文详细介绍了如何从零开始实现Express的核心功能,包括安装Express、创建服务器、实现app.get()、post等方法,以及中间件的实现,特别是错误处理中间件的工作原理。通过这次实践,加深了对Express框架的理解,揭示了其内部机制。
摘要由CSDN通过智能技术生成
  • 一、首先安装express

  • 二、创建example.js文件

  • 创建myExpress.js文件

  • 实现app.get()方法

  • 实现post等其他方法。

  • 实现app.all方法

  • 中间件app.use的实现

  • 什么是错误中间件?

  • 学习总结

  • 最后

一、首先安装express

npm install express

安装express是为了示范。

已经把代码放到github:https://github.com/Sunny-lucking/HowToBuildMyExpress 。可以顺手给个star吗?谢谢大佬们。

二、创建example.js文件

// example.js
const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`)
})

如代码所示,执行node example.js就运行起了一个服务器。

如下图所示,现在我们决定创建一个属于我们的express文件,引入的express改成引入我们手写的express。。

好了,现在开始实现我们的express吧!

创建myExpress.js文件

const express = require('express')
const app = express()

由 这两句代码,我们可以知道,express得到的是一个方法,然后方法执行后得到了app。而app实际上也是一个函数,至于为什么会是函数,我们下面会揭秘。

我们可以初步实现express如下:

// myExpress.js
function createApplication() {
    let app = function (req,res) {

    }
    return app;
}

module.exports = createApplication;

在上面代码中,发现app有listen方法。

因此我们可以进一步给app添加listen方法:

// myExpress.js
function createApplication() {
    let app = function (req,res) {

    }
    app.listen = function () {

    }
    return app;
}

module.exports = createApplication;

app.listen实现的是创建一个服务器,并且将服务器绑定到某个端口运行起来。

因此可以这样完善listen方法。

// myExpress.js
let http = require('http');
function createApplication() {
    let app = function (req,res) {
        res.end('hahha');
    }
    app.listen = function () {
        let server = http.createServer(app)
        server.listen(...arguments);

    }
    return app;
}

module.exports = createApplication;

这里可能会有同学有所疑问,为什么 http.createServer(app)这里要传入app。

其实我们不传入app,也就是说,让app不是一个方法,也是可以的。

我们可以改成这样。

// myExpress.js
let http = require('http');
function createApplication() {
    let app = {};

    app.listen = function () {
        let server = http.createServer(function (req, res) {
            res.end('hahha')
        })
        server.listen(...arguments);

    }
    return app;
}

module.exports = createApplication;

如代码所示,我们将app改成一个对象,也是没有问题的。

.

实现app

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值