资讯专栏INFORMATION COLUMN

Node.js学习之路15——Domain捕获错误

Cc_2011 / 3409人阅读

摘要:可以通过监听该对象的事件并指定事件回调函数的方法来实现当捕捉到错误时的处理。

1. 捕获错误

try...catch机制不能捕获异步方法抛出的错误

uncaughtException时间可以捕获任何未被处理的错误,但是可能会引起内存泄漏等情况

2. domain模块获取错误

使用domian模块中的create方法创建一个domain对象,var domain = domain.create(),create方法没有任何参数,该方法返回被创建的Domain对象。该对象是一个继承了EventEmitter类的实例对象,当该对象捕获到任何错误时,触发该对象的error事件。可以通过监听该对象的error事件并指定事件回调函数的方法来实现当捕捉到错误时的处理。domain.on("error", function(err){})

domain模块中,为Domain对象定义了一个name属性值,可以使用该属性值来设置或获取该Domain对象的名称。

在Domain对象被创建后,需要指定该对象所监听的代码,我们需要将这些代码书写在一个函数中,并且使用Domain对象的run方法指定Domain对象监听该函数中的代码。当这些代码触发任何错误时,将被Domain对象捕获。Domain对象的run方法的指定方法如下domain.run(fn)

Domain对象的run方法中,使用一个参数,参数值为一个函数,当该函数中触发任何错误时,将被Domain对象捕获。

Domain对象不再需要的时候,可以销毁d.dispose();

示例
const http = require("http");
const domain = require("domain");
const process = require("process");
http.createServer(function (req, res) {
    var d = domain.create();
    d.name = "domainOne";
    d.once("error", function (err) {
        res.writeHead(200, { "Content-Type": "text/html" });
        res.write("")
        res.write("服务器端接收客户端请求时发生以下错误:")
        res.end(err.message);
    })
    d.run(function () {
        if (req.url !== "/favicon.ico") {
            notexitsfunction(); //this is an error
            res.writeHead(200, { "Content-Type": "text/html" });
            res.write("")
            res.end("hello");
        }
        process.nextTick(() => {
            setTimeout(() => {
                fs.open("./notExistFile.txt", "r", (err, fd) => {
                    if (err) {
                        throw err;
                    }
                })
            })
        })

    })

}).listen(2576, "localhost")

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/92955.html

相关文章

  • Node.js学习之路17——DNS模块介绍

    摘要:在中,提供模块,以实现域名查找及域名解析的处理。方法用于将一个域名解析为一组记录。记录是域名服务器记录,用来指定该域名由哪个服务器进行解析。回调函数有两个参数,是域名解析失败时触发的错误对象,参数为一个数组,其中存放了所有获取到的记录。 1. DNS 在Node.js中,提供DNS模块,以实现域名查找及域名解析的处理。 在DNS模块中,提供了三个主方法及一系列便捷方法。 reso...

    roadtogeek 评论0 收藏0
  • Node.js 指南(域模块剖析)

    摘要:快速检查可能告诉我们,简单地从的域处理程序抛出将允许然后捕获异常并执行其自己的错误处理程序,虽然情况并非如此,检查后,你会看到堆栈只包含。 域模块剖析 可用性问题 隐式行为 开发人员可以创建新域,然后只需运行domain.enter(),然后,它充当将来抛出者无法观察到的任何异常的万能捕捉器,允许模块作者拦截不同模块中不相关代码的异常,防止代码的发起者知道自己的异常。 以下是一个间接链...

    ymyang 评论0 收藏0
  • Node.js学习之路19——punycode模块与os模块

    摘要:模块转换为编码模块内部使用类库以将域名从地方语言所采用的各种编码转换为可用于服务器的编码因为操作系统的核心都是英文服务器的解析也是由英文代码交换所以服务器并不支持直接的使用地方语言的域名解析所有地方语言域名的解析都需要转成编码然后由服务器解 1. punycode punycode模块转换为punycode编码 punycode模块内部使用punycode.js类库,以将域名从地方...

    xumenger 评论0 收藏0
  • Node.js 全局对象 process

    摘要:是一个全局变量,对象的属性。的源码启动进程,评估时返回函数失败。调用监听器回调函数时会将的值作为唯一参数传入。信号列表详见标准的信号名,如等。返回一个对象,描述了进程所用的内存状况,单位为字节。一旦当前事件循环结束,调用回调函数。 process是一个全局变量,global对象的属性。它的作用是描述当前Node.js进程状态的对象,提供了一个与操作系统的简单接口。通常在你写本地命令程序...

    JasonZhang 评论0 收藏0
  • 高质量 Node.js 微服务的编写和部署

    摘要:编写代码的开发人员必须负责代码的生产部署。构建和部署链需要重大更改,以便为微服务环境提供正确的关注点分离。该对象会在之后的时被这时的回调函数会被调用,并输出。微服务部署及集成部署微服务时有一个原则一个容器中只放一个服务,可以使用编 前几天在微信群做的一次分享,整理出来分享给大家,相关代码请戳 https://github.com/Carrotzpc/docker_web_app sho...

    szysky 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<