请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

执行中间件可优化3个部分

老师,执行中间件的时候,如果使用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函数的时候,一直保留外层的变量,是否会发生内存泄漏?是否可优化的地方?我尝试过,但是实在想不出有比老师给的代码更好的方案。

正在回答 回答被采纳积分+3

1回答

双越 2019-09-10 19:38:20

可以说一下你的代码,和视频中代码的对比,主要是哪里做了改动?否则很难看出重点。

0 回复 有任何疑惑可以回复我~
  • 提问者 meimei1314 #1
    如提问中,写的代码,register函数,match函数做了改动。
    还有,请问,执行handler函数的时候,一直保留外层的变量,是否会发生内存泄漏?是否可优化的地方?我尝试过,但是实在想不出有比老师给的代码更好的方案。
    回复 有任何疑惑可以回复我~ 2019-09-11 16:52:43
  • 双越 回复 提问者 meimei1314 #2
    1. 看这俩函数代码没啥问题(我没实际执行过);2. 内存泄漏是本应该释放的没有释放,而这个代码中,中间件是必须要存储下来的,不能释放,所以不能称作内存泄漏。
    回复 有任何疑惑可以回复我~ 2019-09-11 19:33:35
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信