express
的路由模块是怎么注册和触发的吧const express = require("express");
const router = express.Router();
router.get('/index', (req, res) => {
console.log('/index');
})
复制代码
引入express
的路由模块,经过get
方法传入路径和对应的函数。html
咱们能够看到上面的例子中,router
包含两个参数,路径
,函数
。同理,咱们要实现的路由函数也应该包含这两部分。 这里咱们要用到node
的两个模块来实现这个功能,node
url
: 解析路由express
events
: 注册以及触发路由事件浏览器
咱们先来实现路由的注册功能。 新建一个route.js
bash
var evt = require('events'); // 引入events模块
var route = new evt.EventEmitter(); // 初始化一个事件对象
function registeEvt(key, fn) {
route.on(key, fn)
}
route.registeEvt = registeEvt; // 给事件添加注册功能
exports.route = route; // 暴露事件
复制代码
接下来咱们实现一下路由的分发。 新建一个入口文件index.js
函数
var http = require('http');
http.createServer(function(request, response) {
....
}).listen(8888);
console.log('server is listen at http://127.0.0.1:8888');
复制代码
咱们在这里建立了一个http
服务,监听端口8888
, 在express
中,当请求过来的时候,是由路由对其作处理。请求过来时将触发对应的路由,调用对应的函数。 所以咱们能够在服务中经过介些url
获取到pathname
来分发路由。ui
var http = require('http');
var url = require('url');
var route = require('./route.js').route;
http.createServer(function(req, res) {
let path = url.parse(req.url).pathname;
route.emit(path, req, res); // 触发对应的事件, 由于咱们是在路由中处理请求,所以须要将req和res传递过去
}).listen(8888);
console.log('server is listen at http://127.0.0.1:8888');
复制代码
如今咱们来尝试在index.js
中注册一个路由url
。。。
var route = require('./route.js').route;
route.registeEvt('/index.html', function(req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('hello world11234');
})
。。。
复制代码
而后咱们启动服务 node index.js
,在浏览器地址栏输入localhost:8888/index.html
,回车spa
顺利!。code
没啥好总结的,只是今天看到node
的EventEmitter
类时忽然产生的灵感,作个机灵。能顺手骗个赞就更好了。