执行中间件可优化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

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

0
2
双越
回复
meimei1314
1. 看这俩函数代码没啥问题(我没实际执行过);2. 内存泄漏是本应该释放的没有释放,而这个代码中,中间件是必须要存储下来的,不能释放,所以不能称作内存泄漏。
2019-09-11
共2条回复

Node.js+Express+Koa2+Nest.js 开发服务端

从入门到实战,一站式掌握 Node.js+Express+Koa2

4051 学习 · 2006 问题

查看课程