以下列表是不完整的,但列举了编写 Node.js 程序时会遇到的一些常见的系统错误。
详细的列表可从 [errno
(3) 参考手册][errno
(3) man page]找到。
EACCES
(拒绝访问): 试图以被一个文件的访问权限禁止的方式访问一个文件。EADDRINUSE
(地址已被使用): 试图绑定一个服务器([net
]、[http
] 或 [https
])到本地地址,但因另一个本地系统的服务器已占用了该地址而导致失败。ECONNREFUSED
(连接被拒绝): 无法连接,因为目标机器积极拒绝。 这通常是因为试图连接到外部主机上的弃用的服务。ECONNRESET
(连接被重置): 一个连接被强行关闭。 这通常是因为连接到远程 socket 超时或重启。 常发生于 [http
] 和 [net
] 模块。EEXIST
(文件已存在): 一个操作的目标文件已存在,而要求目标不存在。EISDIR
(是一个目录): 一个操作要求一个文件,但给定的路径是一个目录。EMFILE
(系统打开了太多文件): 已达到系统[文件描述符][file descriptors]允许的最大数量,且描述符的请求不能被满足直到至少关闭其中一个。 当一次并行打开多个文件时会发生这个错误,尤其是在进程的文件描述限制数量较低的操作系统(如 macOS)。 要解决这个限制,可在运行 Node.js 进程的同一 shell 中运行ulimit -n 2048
。ENOENT
(无此文件或目录): 通常是由 [fs
] 操作引起的,表明指定的路径不存在。给定的路径找不到文件或目录。ENOTDIR
(不是一个目录): 给定的路径虽然存在,但不是一个目录。 通常是由 [fs.readdir
] 引起的。ENOTEMPTY
(目录非空): 一个操作的目标是一个非空的目录,而要求的是一个空目录,通常是由 [fs.unlink
] 引起的。ENOTFOUND
(DNS查找失败): 表示EAI_NODATA
或EAI_NONAME
的 DNS 失败。 这不是标准的 POSIX 错误。EPERM
(操作不被允许): 试图执行一个需要更高权限的操作。EPIPE
(管道损坏): 写入一个管道、socket 或 FIFO 时没有进程读取数据。 常见于 [net
] 和 [http
] 层,表明远端要写入的流已被关闭。ETIMEDOUT
(操作超时): 一个连接或发送的请求失败,因为连接方在一段时间后没有做出合适的响应。 常见于 [http
] 或 [net
]。 往往标志着socket.end()
没有被正确地调用。