JavaScript错误处理指南之Node.js

footballboy
发布于 2021-4-6 09:41
浏览
0收藏

Node.js 中的异步错误处理:事件发射器

 

你在 Node.js 中所做的大部分工作都是基于 事件 的。大多数情况下,你会与 发射器对象 和一些观察者交互以侦听消息。

 

Node.js 中的任何事件驱动模块(例如 net,https://nodejs.org/dist/latest-v14.x/docs/api/net.html)都扩展了一个名为 EventEmitter 的根类。

 

Node.js 中的 EventEmitter 有两种基本方法:on 和 emit。

考虑以下简单的 HTTP 服务器:

const net = require("net");
const server = net.createServer().listen(8081, "127.0.0.1");
server.on("listening", function () {
  console.log("Server listening!");
});
server.on("connection", function (socket) {
  console.log("Client connected!");
  socket.end("Hello client!");
});

 

在这里我们监听两个事件:listening 和 connection。除了这些事件之外,事件发射器还在出现错误时公开一个 错误 事件。


如果你在端口 80 上运行此代码,则会得到一个异常:

const net = require("net");
const server = net.createServer().listen(80, "127.0.0.1");
server.on("listening", function () {
  console.log("Server listening!");
});
server.on("connection", function (socket) {
  console.log("Client connected!");
  socket.end("Hello client!");
});

 

输出:

events.js:291
      throw er; // Unhandled 'error' event
      ^
Error: listen EACCES: permission denied 127.0.0.1:80
Emitted 'error' event on Server instance at: ...

 

要捕获它,我们可以注册一个 错误 事件处理器:

server.on("error", function(error) {
  console.error(error.message);
});

 

这会打印:

listen EACCES: permission denied 127.0.0.1:80

 

此外,该程序不会崩溃。要了解有关该主题的更多信息,请参考“Node.js 中的错误处理”。

 

https://www.joyent.com/node-js/production/design/errors

 

 

分类
已于2021-4-6 09:41:35修改
收藏
回复
举报
回复
    相关推荐