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
類時忽然產生的靈感,作個機靈。能順手騙個贊就更好了。