执行中间件可优化3个部分
来源:10-17 -总结
meimei1314
2019-09-09
老师,执行中间件的时候,如果使用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函数的时候,一直保留外层的变量,是否会发生内存泄漏?是否可优化的地方?我尝试过,但是实在想不出有比老师给的代码更好的方案。
写回答
1回答
-
双越
2019-09-10
可以说一下你的代码,和视频中代码的对比,主要是哪里做了改动?否则很难看出重点。
022019-09-11
相似问题