在第一第二节中,我们讲述了不少有关于 Express
的用法,但是对它的细节或原理避而不谈。那么今天我们就来实现自己的一个 Express
,加深对 Express
的理解。不力求完全实现 Express
的所有代码,但求实现它的核心逻辑。
准备工作
那我们先来创建一个 my-express
文件夹,npm init
添入一些基本信息。再来捋一捋我们的需求,一步一步地去实现。
•可以解析不同路径的路由•中间件逻辑处理•模板文件处理,手写模板引擎•处理静态文件访问逻辑
有了这几点之后,我们就可以分步去解决这个问题了。
路由处理
首先抛开 Express
不谈,我们先来看看 Node.js
是如何创建一个服务器的,毕竟我们是基于 Node.js
来做一些上层的封装。
http.createServer()
Node.js
中创建一个服务器十分简单,只有下面寥寥数行代码:
var http = require('http');
http.createServer(function (request, response) {
response.end('Hello World');
}).listen(3000);
创建完一个服务器后,我们应该处理不同路由的逻辑。新建一个express.js
文件,主要编写我们的源码逻辑,再新建一个app.js
,主要编写业务测试逻辑。
•创建一个监听函数 app
,在这个监听函数中会有两个参数 req
和 res
,这两个参数都是 createServer
提供给我们的,用于处理请求的逻辑参数和返回的逻辑参数•app.js
中调用一下 listen
方法,咱们的服务器就跑起来了
//express.js
const http = require('http')
const url = require('url')
function express() {
function app(req, res) {
}
app.listen = function () {
let server = http.createServer(app)
server.listen(...arguments)
}
return app
}
module.exports = express
//app.js
var express = require('./express')
var app = express()
app.listen(3000)
解析请求方法和路径
我们可以通过如下方法来获取请求的方法和路径
let _method = req.method.toLowerCase()
let {
pathname
} = url.parse(req.url, true)
中间件
在没有路由分区之前, Express
可以通过如下方式来注册一个路由,即用中间件方法use
。
app.use('/user/get',function(req,res,next){
})
实现这种方式之前,思考一下我们在开发的时候,所有的路由都是已经写好的,然后程序跑起来的时候再根据方法与路径来匹配对应的路由。所以app.use
应当是一个注册的方法,它可以注册路由,也可以注册中间件,而广义来说 Express
中的路由就是中间件的一种。
暂无评论内容