位置: 编程技术 - 正文

NodeJS处理Express中异步错误(nodejs处理excel)

编辑:rootadmin

推荐整理分享NodeJS处理Express中异步错误(nodejs处理excel),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:nodejs处理大文件,nodejs处理提交头像,nodejs处理音视频,nodejs处理图片,nodejs处理pdf,nodejs处理post请求,nodejs处理post请求,nodejs处理post请求,内容如对您有帮助,希望把文章链接给更多的朋友!

摘要

比起回调函数,使用 Promise 来处理异步错误要显得优雅许多。

结合 Express 内置的错误处理机制和 Promise 极大地降低产生未捕获错误(uncaught exception)的可能性。

Promise 在ES6中是默认选项。如果使用 Babel 转译,它也可以与 Generators 或者 Async/Await 相结合。

本文主要阐述如何在 Express 中使用错误处理中间件(error-handling middleware)来高效处理异步错误。在 Github 上有对应 代码实例 可供参考。

首先,让我们一起了解 Express 提供的开箱即用的错误处理工具。然后,我们将探讨如何使用 Promise, Generators 以及 ES7 的 async/await 来简化错误处理流程。

Express 内置的异步错误处理

在默认情况下,Express 会捕获所有在路由处理函数中的抛出的异常,然后将它传给下一个错误处理中间件:

对于同步执行的代码,以上的处理已经足够简单。然而,当异步程序在执行时抛出异常的情况,Express 就无能为力。原因在于当你的程序开始执行回调函数时,它原来的栈信息已经丢失。

对于这种情况,可以使用 next 函数来将错误传递给下一个错误处理中间件

使用这种方法虽然一时爽,却带来了两个问题:

你需要显式地在错误处理中间件中分别处理不同的异常。

一些隐式异常并没有被处理(如尝试获取一个对象并不存在的属性)

利用 Promise 传递异步错误

在异步执行的程序中使用 Promise 处理任何显式或隐式的异常情况,只需要在 Promise 链尾加上 .catch(next) 即可。

现在,所有异步和同步程序都将被传递到错误处理中间件。棒棒的。

虽然 Promise 让异步错误的传递变得容易,但这样的代码仍然有一些冗长和刻板。这时候 promise generator 就派上了用场。

用 Generators 简化代码

NodeJS处理Express中异步错误(nodejs处理excel)

如果你使用的环境原生支持 Generators,你可以手动实现以下的功能。不过这里我们将借用 Bluebird.coroutine 来说明如何使用 Promise generator 来简化刚才的代码。

尽管接下来的例子使用的是 bluebird ,其它 Promise 库(如 co)也都支持 Promise generator.

首先,我们需要使得 Express 路由函数与 Promise generator 兼容:

这个函数是一个高阶函数,它做了以下几件事情:(分别与代码片段中的注释对应)

以 Genrator 为唯一的输入

让这个函数懂得如何 yield promise

返回一个普通的 Express 路由函数

当这个函数被执行时,它会使用 coroutine 来 yield promise,捕获期间发生的异常,然后将其传递给 next 函数

借助这个函数,我们就可以这样构造路由函数:

现在,Express 的异步错误处理流程的可读性已经近乎令人满意,而且你可以像写同步执行的代码一样去书写异步执行的代码,唯一不要忘了的就是 yield promises。

然而这还不是终点,ES7 的 async/await 提议可以让代码变得更简洁。

使用 ES7 async/await

ES7 async/await 的行为就像 Promise Generator 一样,只不过它可以被用到更多的地方(如类方法或者胖箭头函数)。

为了在 Express 中使用 async/await,同时优雅地处理异步错误,我们仍然需要一个与上文提到的 wrap 类似的函数:

let wrap = fn => (...args) => fn(...args).catch(args[2])这样,我们就可以按底下这种方式书写路由函数:

现在可以愉快地写代码了

有了对同步和异步错误的处理,你可以用新的方式来开发 Express App。但有两点需要注意:

要习惯使用 throw ,它使得你的代码目的明确,throw 会明确地将程序引到错误处理中间件,这对同步或异步的程序都是适用的。遇到特殊情况,当你觉得有必要时,也可以自行 try/catch。

要习惯使用 custom error classes ,如 BadRequestError,因为这可以让你在错误处理中间件中更方便地分类处理。

需要注意

以上介绍的方法要求所有异步操作必须返回 promise。如果你的异步操作是使用回调函数的方式,你需要将其转化成 promise。(可以直接使用 Bluebird.promisifyAll 这类函数) 事件发射器(如 steams)仍然会导致未捕获异常,你需要注意合理地处理这类情况:

nodejs学习笔记之路由 server.jsvarhttp=require("http");varurl=require("url");functionstart(route){//route.js的route方法//服务实现functiononRequest(request,response){varpathname=url.parse(request.url.).pathname;route

深入nodejs中流(stream)的理解 nodejs的fs模块并没有提供一个copy的方法,但我们可以很容易的实现一个,比如:varsource=fs.readFileSync('/path/to/source',{encoding:'utf8'});fs.writeFileSync('/path/to/dest'

利用NPM淘宝的node.js镜像加速nvm NVM加速安装Node.js一般都是用nvm但是安装之后使用体验就不咋地了,由于某些不可变原因,国内网络就不好吐槽了;就连执行一下nvmls-remote都要很久。当

标签: nodejs处理excel

本文链接地址:https://www.jiuchutong.com/biancheng/377893.html 转载请保留说明!

上一篇:简单好用的nodejs 爬虫框架分享(简单好用的记账app)

下一篇:nodejs学习笔记之路由(nodejs基础知识)

  • 信息化投入包括手机吗
  • 当期所得税费用可以是负数吗
  • 汽车修理公司兼职好做吗
  • 农产品增值税加计扣除可以补申报吗
  • 计算本月应交所得税
  • 合伙企业主要缴纳的税种?
  • 连续亏损3年
  • 补缴工会经费后所得税还要调整吗
  • 工资发放流程以及如何记账
  • 销售货物分期付款怎么确认收入
  • 可以不用附原始凭证的记账凭证是
  • 存货清查的结果
  • 废弃土地的使用年限
  • 自然人独资属于个体工商户吗?
  • 住房公积金如何在手机上提取
  • 装修公司怎么交钱
  • 公司税务注销了还有风险吗
  • 建筑业增值税专票抵扣后的税点是多少
  • 财税[2012]15
  • 土地增值税属于什么税类
  • 增值税差旅费可以扣除吗
  • 利润表适用执行小企业
  • 应收账款余额包括预收账款
  • php sql 教程
  • 增加注册资本的请示
  • 增值税发票开红字发票后账务处理
  • 商业零售企业存货非正常损失
  • 莱达尔湖, 英格兰坎布里亚郡湖区 (© Tranquillian1/iStock/Getty Images Plus)
  • 资产负债表包括什么科目
  • 暂估成本的账务处理分录
  • php方法重载
  • 银行承兑汇票背书什么意思
  • 孕妇钙片什么时候吃最好吸收? 已解决
  • segment anything model github
  • 担保合同印花税税率怎么算
  • 网站禁止了有什么方法打开
  • php执行命令的函数
  • phpstorm wsl
  • 生产成本结转库存商品,怎么算知道数量以及单价
  • 美容店销售收入预测表12个月表格
  • 利息收入所得税汇算调整
  • 燃气费计入什么科目
  • 如何在税控盘上申领发票
  • 内账会计成本是什么意思
  • 小企业长期债券投资
  • 建筑业服务包含哪些?
  • 房屋估价需要准备什么
  • 公司突然改变工资结构
  • 应计利息是什么类科目核算
  • 政府无偿划拨土地如何摊销
  • 委托收款的流程
  • Linux(Ubuntu)下Mysql5.6.28安装配置方法图文教程
  • freebsd login
  • 安装xp后win7不能用怎么办
  • ubuntu lnmp环境搭建
  • Win7系统打印机共享无法保存打印机设置0x000006d9
  • 苹果mac系统怎么更新
  • win8怎么关闭系统自动更新
  • win10怎么查看磁盘是固态还是机械
  • win8系统怎么进入控制面板
  • cocos2dx官方教程
  • android开发地图应用
  • css选择器类选择器
  • 调用perl脚本
  • python快速排序算法代码
  • javascript常用语法
  • Node.js中的事件循环是什么
  • 常用dos命令详解
  • javascript html5实现表单验证
  • shell错误日志输出
  • 深入解析windows第7版pdf
  • jquery中遍历指定的对象和数组是哪个方法
  • jquery audio
  • android实时获取微信聊天信息
  • 浙江公务员冬令时上班时间
  • 昆山国税局上班时间
  • 四川税务申报如何网上申报零申报
  • 跨市变更税务登记要多久
  • 企业自有房屋需要交税吗
  • 2019小规模纳税人标准
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设