其实上篇已经详细介绍了如何从 alinode 官方镜像中提取 Dockerfile 的完整过程。
但在提取的时候,我写了个工具,方便以后使用,既然写了,就分享下。
alinode 官方镜像分析并提取 Dockerfile
上篇介绍了 alinode 自定义封装,但毕竟不是官网原配置,群里也有人吐槽过官网镜像太大。
所以这次分析官网镜像,看看到底为什么这么多大,顺便提取官网 Dockerfile。
使用 Symbol.match 优化正则匹配
如果想从 'uid: 123'
字符串中匹配出 123 我通常会 'uid: 123'.match(/uid: (\d+)/)[1]
。
但如果字符串不符合规范,正则会返回 null 导致 [1] 操作报错 Uncaught TypeError: Cannot read property '1' of null
。
所以我会 ('uid: null'.match(/uid: (\d+)/) || 0)[1]
来防止报错。
但这样很不优雅。
Express async 全局错误处理
之前两篇 Promise 错误处理其实已经描述了大部分场景下的错误捕获问题。
结合 async/await 可以获得很好的开发体验。
express 也可以使用 async/await 来提升开发体验,但必须 try/catch 所有 await 才行。
那么今天的课题就是如何优雅的在 express 中使用 async/await 来提升开发体验。
koa2 中的错误处理以及中间件设计原理
其实这不是一个问题,因为就 koa2 而言,他已经帮我做好了统一错误处理入口 app.onerror
方法。
我们只要覆盖这个方法,就可以统一处理包括 中间件,事件,流 等出现的错误。
但我们始终会看到 UnhandledPromiseRejectionWarning:
类型的错误。
当然,这不一定就是 koa 导致,有可能是其他异步未处理错误导致的,但这都不重要。
让我们来看看 koa 是如何处理全局错误的。