1. 中間件到底是個什么東西呢?
[!NOTE]
中間件其是一個函式,在回應發送之前對請求進行一些操作

function middleware(req,res,next){
// 做該干的事
// 做完后呼叫下一個函式
next();
}
這個函式有些不太一樣,它還有一個next引數,而這個next也是一個函式,它表示函式陣列中的下一個函式
2. 函式陣列又是什么呢?
[!NOTE]
express內部維護一個函式陣列,這個函式陣串列示在發出回應之前要執行的所有函式,也就是中間件陣列
使用app.use(fn)后,傳進來的fn就會被扔到這個陣列里,執行完畢后呼叫next()方法執行函式陣列里的下一個函式,如果沒有呼叫next()的話,就不會呼叫下一個函式了,也就是說呼叫就會被終止
3. 如何實作一個中間件呢?
function express() {
// 函式陣列用于存放所有的中間件函式
let fns = [];
let app = function(req, res) {
let i = 0;
function next() {
// 取出陣列中的下一個函式
let task = fns[i++];
// 如果函式存在的u啊
if (task) {
// 就先去執行這個用戶自定義的函式里面的業務邏輯(每次把當前的next繼續向后傳遞)
task(req, res, next);
}
}
// 用戶首次呼叫的執行第一個
next();
}
// 使用use的時候就把用戶指定的這個函式放入到一個函式陣列里面去
app.use = function(task) {
fns.push(task);
}
return app;
}
4. 模擬實作一個異步按順序執行的函式?(面試重點)
function fn1(next) {
next();
}
function fn2(next) {
next();
}
function fn3(next) {
next();
}
// 類似于一個異步的迭代器
function nextRegister(...tasks) {
let i = 0;
function next() {
let task = tasks[i];
if (!task || typeof task !== 'function') {
return ;
}
task(next);
}
// 第一次呼叫
next();
}
// 開始注冊三個異步函式
nextRegister(fn1, fn2, fn3);
5. 描述一下express或者koa的技術架構?
[!NOTE]
關鍵在于解釋清楚對路由中間件的理解,可以以koa的洋蔥模型講解為例,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/5228.html
標籤:其他
上一篇:【前端知識體系-JS相關】10分鐘搞定JavaScript正則運算式高頻考點
下一篇:【計算機網路】UDP基礎知識總結
