老师,执行中间件的时候,如果使用app.use()的话,头部符合路由的都执行,但是如果是get请求或者是post请求的时候只执行,路由一模一样的中间件,且每个中间件事按照声明的顺序依次执行的。
第一,所以,register函数和match函数是否可以写成以下代码?
register(path, ...stack) {
let info = {
order: ++this.order
}
if (typeof path === 'string') {
info.path = path
info.stack = [...stack]
} else {
info.path = '/'
info.stack = [path, ...stack]
}
return info
}
match(method, url) {
let stack = []
if (url === 'favicon.icon') {
return stack
}
let arr = this.routes[method].filter(item => {
return item.path === url
})
let all = this.routes.all
while(all.length && arr.length) {
let item;
if (all[0].order < arr[0].order) {
item = all.shift()
} else {
item = arr.shift()
}
if (url.indexOf(item.path) === 0) {
stack.push(...item.stack)
}
}
while(all.length) {
const item = all.shift()
if (url.indexOf(item.path) === 0) {
stack.push(...item.stack)
}
}
while(arr.length) {
const item = arr.shift()
if (url.indexOf(item.path) === 0) {
stack.push(...item.stack)
}
}
return stack
}
第二,请问,执行handler函数的时候,一直保留外层的变量,是否会发生内存泄漏?是否可优化的地方?我尝试过,但是实在想不出有比老师给的代码更好的方案。