Node.js v25.0.0 文档
- Node.js v25.0.0
-
目录
- 错误
- 错误传播与拦截
- 类:
Error
- 类:
AssertionError
- 类:
RangeError
- 类:
ReferenceError
- 类:
SyntaxError
- 类:
SystemError
- 类:
TypeError
- 异常 vs. 错误
- OpenSSL 错误
- Node.js 错误码
ABORT_ERR
ERR_ACCESS_DENIED
ERR_AMBIGUOUS_ARGUMENT
ERR_ARG_NOT_ITERABLE
ERR_ASSERTION
ERR_ASYNC_CALLBACK
ERR_ASYNC_TYPE
ERR_BROTLI_COMPRESSION_FAILED
ERR_BROTLI_INVALID_PARAM
ERR_BUFFER_CONTEXT_NOT_AVAILABLE
ERR_BUFFER_OUT_OF_BOUNDS
ERR_BUFFER_TOO_LARGE
ERR_CANNOT_WATCH_SIGINT
ERR_CHILD_CLOSED_BEFORE_REPLY
ERR_CHILD_PROCESS_IPC_REQUIRED
ERR_CHILD_PROCESS_STDIO_MAXBUFFER
ERR_CLOSED_MESSAGE_PORT
ERR_CONSOLE_WRITABLE_STREAM
ERR_CONSTRUCT_CALL_INVALID
ERR_CONSTRUCT_CALL_REQUIRED
ERR_CONTEXT_NOT_INITIALIZED
ERR_CPU_PROFILE_ALREADY_STARTED
ERR_CPU_PROFILE_NOT_STARTED
ERR_CPU_PROFILE_TOO_MANY
ERR_CRYPTO_ARGON2_NOT_SUPPORTED
ERR_CRYPTO_CUSTOM_ENGINE_NOT_SUPPORTED
ERR_CRYPTO_ECDH_INVALID_FORMAT
ERR_CRYPTO_ECDH_INVALID_PUBLIC_KEY
ERR_CRYPTO_ENGINE_UNKNOWN
ERR_CRYPTO_FIPS_FORCED
ERR_CRYPTO_FIPS_UNAVAILABLE
ERR_CRYPTO_HASH_FINALIZED
ERR_CRYPTO_HASH_UPDATE_FAILED
ERR_CRYPTO_INCOMPATIBLE_KEY
ERR_CRYPTO_INCOMPATIBLE_KEY_OPTIONS
ERR_CRYPTO_INITIALIZATION_FAILED
ERR_CRYPTO_INVALID_AUTH_TAG
ERR_CRYPTO_INVALID_COUNTER
ERR_CRYPTO_INVALID_CURVE
ERR_CRYPTO_INVALID_DIGEST
ERR_CRYPTO_INVALID_IV
ERR_CRYPTO_INVALID_JWK
ERR_CRYPTO_INVALID_KEYLEN
ERR_CRYPTO_INVALID_KEYPAIR
ERR_CRYPTO_INVALID_KEYTYPE
ERR_CRYPTO_INVALID_KEY_OBJECT_TYPE
ERR_CRYPTO_INVALID_MESSAGELEN
ERR_CRYPTO_INVALID_SCRYPT_PARAMS
ERR_CRYPTO_INVALID_STATE
ERR_CRYPTO_INVALID_TAG_LENGTH
ERR_CRYPTO_JOB_INIT_FAILED
ERR_CRYPTO_JWK_UNSUPPORTED_CURVE
ERR_CRYPTO_JWK_UNSUPPORTED_KEY_TYPE
ERR_CRYPTO_KEM_NOT_SUPPORTED
ERR_CRYPTO_OPERATION_FAILED
ERR_CRYPTO_PBKDF2_ERROR
ERR_CRYPTO_SCRYPT_NOT_SUPPORTED
ERR_CRYPTO_SIGN_KEY_REQUIRED
ERR_CRYPTO_TIMING_SAFE_EQUAL_LENGTH
ERR_CRYPTO_UNKNOWN_CIPHER
ERR_CRYPTO_UNKNOWN_DH_GROUP
ERR_CRYPTO_UNSUPPORTED_OPERATION
ERR_DEBUGGER_ERROR
ERR_DEBUGGER_STARTUP_ERROR
ERR_DIR_CLOSED
ERR_DIR_CONCURRENT_OPERATION
ERR_DLOPEN_DISABLED
ERR_DLOPEN_FAILED
ERR_DNS_SET_SERVERS_FAILED
ERR_DOMAIN_CALLBACK_NOT_AVAILABLE
ERR_DOMAIN_CANNOT_SET_UNCAUGHT_EXCEPTION_CAPTURE
ERR_DUPLICATE_STARTUP_SNAPSHOT_MAIN_FUNCTION
ERR_ENCODING_INVALID_ENCODED_DATA
ERR_ENCODING_NOT_SUPPORTED
ERR_EVAL_ESM_CANNOT_PRINT
ERR_EVENT_RECURSION
ERR_EXECUTION_ENVIRONMENT_NOT_AVAILABLE
ERR_FALSY_VALUE_REJECTION
ERR_FEATURE_UNAVAILABLE_ON_PLATFORM
ERR_FS_CP_DIR_TO_NON_DIR
ERR_FS_CP_EEXIST
ERR_FS_CP_EINVAL
ERR_FS_CP_FIFO_PIPE
ERR_FS_CP_NON_DIR_TO_DIR
ERR_FS_CP_SOCKET
ERR_FS_CP_SYMLINK_TO_SUBDIRECTORY
ERR_FS_CP_UNKNOWN
ERR_FS_EISDIR
ERR_FS_FILE_TOO_LARGE
ERR_FS_WATCH_QUEUE_OVERFLOW
ERR_HTTP2_ALTSVC_INVALID_ORIGIN
ERR_HTTP2_ALTSVC_LENGTH
ERR_HTTP2_CONNECT_AUTHORITY
ERR_HTTP2_CONNECT_PATH
ERR_HTTP2_CONNECT_SCHEME
ERR_HTTP2_ERROR
ERR_HTTP2_GOAWAY_SESSION
ERR_HTTP2_HEADERS_AFTER_RESPOND
ERR_HTTP2_HEADERS_SENT
ERR_HTTP2_HEADER_SINGLE_VALUE
ERR_HTTP2_INFO_STATUS_NOT_ALLOWED
ERR_HTTP2_INVALID_CONNECTION_HEADERS
ERR_HTTP2_INVALID_HEADER_VALUE
ERR_HTTP2_INVALID_INFO_STATUS
ERR_HTTP2_INVALID_ORIGIN
ERR_HTTP2_INVALID_PACKED_SETTINGS_LENGTH
ERR_HTTP2_INVALID_PSEUDOHEADER
ERR_HTTP2_INVALID_SESSION
ERR_HTTP2_INVALID_SETTING_VALUE
ERR_HTTP2_INVALID_STREAM
ERR_HTTP2_MAX_PENDING_SETTINGS_ACK
ERR_HTTP2_NESTED_PUSH
ERR_HTTP2_NO_MEM
ERR_HTTP2_NO_SOCKET_MANIPULATION
ERR_HTTP2_ORIGIN_LENGTH
ERR_HTTP2_OUT_OF_STREAMS
ERR_HTTP2_PAYLOAD_FORBIDDEN
ERR_HTTP2_PING_CANCEL
ERR_HTTP2_PING_LENGTH
ERR_HTTP2_PSEUDOHEADER_NOT_ALLOWED
ERR_HTTP2_PUSH_DISABLED
ERR_HTTP2_SEND_FILE
ERR_HTTP2_SEND_FILE_NOSEEK
ERR_HTTP2_SESSION_ERROR
ERR_HTTP2_SETTINGS_CANCEL
ERR_HTTP2_SOCKET_BOUND
ERR_HTTP2_SOCKET_UNBOUND
ERR_HTTP2_STATUS_101
ERR_HTTP2_STATUS_INVALID
ERR_HTTP2_STREAM_CANCEL
ERR_HTTP2_STREAM_ERROR
ERR_HTTP2_STREAM_SELF_DEPENDENCY
ERR_HTTP2_TOO_MANY_CUSTOM_SETTINGS
ERR_HTTP2_TOO_MANY_INVALID_FRAMES
ERR_HTTP2_TRAILERS_ALREADY_SENT
ERR_HTTP2_TRAILERS_NOT_READY
ERR_HTTP2_UNSUPPORTED_PROTOCOL
ERR_HTTP_BODY_NOT_ALLOWED
ERR_HTTP_CONTENT_LENGTH_MISMATCH
ERR_HTTP_HEADERS_SENT
ERR_HTTP_INVALID_HEADER_VALUE
ERR_HTTP_INVALID_STATUS_CODE
ERR_HTTP_REQUEST_TIMEOUT
ERR_HTTP_SOCKET_ASSIGNED
ERR_HTTP_SOCKET_ENCODING
ERR_HTTP_TRAILER_INVALID
ERR_ILLEGAL_CONSTRUCTOR
ERR_IMPORT_ATTRIBUTE_MISSING
ERR_IMPORT_ATTRIBUTE_TYPE_INCOMPATIBLE
ERR_IMPORT_ATTRIBUTE_UNSUPPORTED
ERR_INCOMPATIBLE_OPTION_PAIR
ERR_INPUT_TYPE_NOT_ALLOWED
ERR_INSPECTOR_ALREADY_ACTIVATED
ERR_INSPECTOR_ALREADY_CONNECTED
ERR_INSPECTOR_CLOSED
ERR_INSPECTOR_COMMAND
ERR_INSPECTOR_NOT_ACTIVE
ERR_INSPECTOR_NOT_AVAILABLE
ERR_INSPECTOR_NOT_CONNECTED
ERR_INSPECTOR_NOT_WORKER
ERR_INTERNAL_ASSERTION
ERR_INVALID_ADDRESS
ERR_INVALID_ADDRESS_FAMILY
ERR_INVALID_ARG_TYPE
ERR_INVALID_ARG_VALUE
ERR_INVALID_ASYNC_ID
ERR_INVALID_BUFFER_SIZE
ERR_INVALID_CHAR
ERR_INVALID_CURSOR_POS
ERR_INVALID_FD
ERR_INVALID_FD_TYPE
ERR_INVALID_FILE_URL_HOST
ERR_INVALID_FILE_URL_PATH
ERR_INVALID_HANDLE_TYPE
ERR_INVALID_HTTP_TOKEN
ERR_INVALID_IP_ADDRESS
ERR_INVALID_MIME_SYNTAX
ERR_INVALID_MODULE
ERR_INVALID_MODULE_SPECIFIER
ERR_INVALID_OBJECT_DEFINE_PROPERTY
ERR_INVALID_PACKAGE_CONFIG
ERR_INVALID_PACKAGE_TARGET
ERR_INVALID_PROTOCOL
ERR_INVALID_REPL_EVAL_CONFIG
ERR_INVALID_REPL_INPUT
ERR_INVALID_RETURN_PROPERTY
ERR_INVALID_RETURN_PROPERTY_VALUE
ERR_INVALID_RETURN_VALUE
ERR_INVALID_STATE
ERR_INVALID_SYNC_FORK_INPUT
ERR_INVALID_THIS
ERR_INVALID_TUPLE
ERR_INVALID_TYPESCRIPT_SYNTAX
ERR_INVALID_URI
ERR_INVALID_URL
ERR_INVALID_URL_PATTERN
ERR_INVALID_URL_SCHEME
ERR_IPC_CHANNEL_CLOSED
ERR_IPC_DISCONNECTED
ERR_IPC_ONE_PIPE
ERR_IPC_SYNC_FORK
ERR_IP_BLOCKED
ERR_LOADER_CHAIN_INCOMPLETE
ERR_LOAD_SQLITE_EXTENSION
ERR_MEMORY_ALLOCATION_FAILED
ERR_MESSAGE_TARGET_CONTEXT_UNAVAILABLE
ERR_METHOD_NOT_IMPLEMENTED
ERR_MISSING_ARGS
ERR_MISSING_OPTION
ERR_MISSING_PASSPHRASE
ERR_MISSING_PLATFORM_FOR_WORKER
ERR_MODULE_LINK_MISMATCH
ERR_MODULE_NOT_FOUND
ERR_MULTIPLE_CALLBACK
ERR_NAPI_CONS_FUNCTION
ERR_NAPI_INVALID_DATAVIEW_ARGS
ERR_NAPI_INVALID_TYPEDARRAY_ALIGNMENT
ERR_NAPI_INVALID_TYPEDARRAY_LENGTH
ERR_NAPI_TSFN_CALL_JS
ERR_NAPI_TSFN_GET_UNDEFINED
ERR_NON_CONTEXT_AWARE_DISABLED
ERR_NOT_BUILDING_SNAPSHOT
ERR_NOT_IN_SINGLE_EXECUTABLE_APPLICATION
ERR_NOT_SUPPORTED_IN_SNAPSHOT
ERR_NO_CRYPTO
ERR_NO_ICU
ERR_NO_TYPESCRIPT
ERR_OPERATION_FAILED
ERR_OPTIONS_BEFORE_BOOTSTRAPPING
ERR_OUT_OF_RANGE
ERR_PACKAGE_IMPORT_NOT_DEFINED
ERR_PACKAGE_PATH_NOT_EXPORTED
ERR_PARSE_ARGS_INVALID_OPTION_VALUE
ERR_PARSE_ARGS_UNEXPECTED_POSITIONAL
ERR_PARSE_ARGS_UNKNOWN_OPTION
ERR_PERFORMANCE_INVALID_TIMESTAMP
ERR_PERFORMANCE_MEASURE_INVALID_OPTIONS
ERR_PROTO_ACCESS
ERR_PROXY_INVALID_CONFIG
ERR_PROXY_TUNNEL
ERR_QUIC_APPLICATION_ERROR
ERR_QUIC_CONNECTION_FAILED
ERR_QUIC_ENDPOINT_CLOSED
ERR_QUIC_OPEN_STREAM_FAILED
ERR_QUIC_TRANSPORT_ERROR
ERR_QUIC_VERSION_NEGOTIATION_ERROR
ERR_REQUIRE_ASYNC_MODULE
ERR_REQUIRE_CYCLE_MODULE
ERR_REQUIRE_ESM
ERR_SCRIPT_EXECUTION_INTERRUPTED
ERR_SCRIPT_EXECUTION_TIMEOUT
ERR_SERVER_ALREADY_LISTEN
ERR_SERVER_NOT_RUNNING
ERR_SINGLE_EXECUTABLE_APPLICATION_ASSET_NOT_FOUND
ERR_SOCKET_ALREADY_BOUND
ERR_SOCKET_BAD_BUFFER_SIZE
ERR_SOCKET_BAD_PORT
ERR_SOCKET_BAD_TYPE
ERR_SOCKET_BUFFER_SIZE
ERR_SOCKET_CLOSED
ERR_SOCKET_CLOSED_BEFORE_CONNECTION
ERR_SOCKET_CONNECTION_TIMEOUT
ERR_SOCKET_DGRAM_IS_CONNECTED
ERR_SOCKET_DGRAM_NOT_CONNECTED
ERR_SOCKET_DGRAM_NOT_RUNNING
ERR_SOURCE_MAP_CORRUPT
ERR_SOURCE_MAP_MISSING_SOURCE
ERR_SOURCE_PHASE_NOT_DEFINED
ERR_SQLITE_ERROR
ERR_SRI_PARSE
ERR_STREAM_ALREADY_FINISHED
ERR_STREAM_CANNOT_PIPE
ERR_STREAM_DESTROYED
ERR_STREAM_NULL_VALUES
ERR_STREAM_PREMATURE_CLOSE
ERR_STREAM_PUSH_AFTER_EOF
ERR_STREAM_UNABLE_TO_PIPE
ERR_STREAM_UNSHIFT_AFTER_END_EVENT
ERR_STREAM_WRAP
ERR_STREAM_WRITE_AFTER_END
ERR_STRING_TOO_LONG
ERR_SYNTHETIC
ERR_SYSTEM_ERROR
ERR_TEST_FAILURE
ERR_TLS_ALPN_CALLBACK_INVALID_RESULT
ERR_TLS_ALPN_CALLBACK_WITH_PROTOCOLS
ERR_TLS_CERT_ALTNAME_FORMAT
ERR_TLS_CERT_ALTNAME_INVALID
ERR_TLS_DH_PARAM_SIZE
ERR_TLS_HANDSHAKE_TIMEOUT
ERR_TLS_INVALID_CONTEXT
ERR_TLS_INVALID_PROTOCOL_METHOD
ERR_TLS_INVALID_PROTOCOL_VERSION
ERR_TLS_INVALID_STATE
ERR_TLS_PROTOCOL_VERSION_CONFLICT
ERR_TLS_PSK_SET_IDENTITY_HINT_FAILED
ERR_TLS_RENEGOTIATION_DISABLED
ERR_TLS_REQUIRED_SERVER_NAME
ERR_TLS_SESSION_ATTACK
ERR_TLS_SNI_FROM_SERVER
ERR_TRACE_EVENTS_CATEGORY_REQUIRED
ERR_TRACE_EVENTS_UNAVAILABLE
ERR_TRAILING_JUNK_AFTER_STREAM_END
ERR_TRANSFORM_ALREADY_TRANSFORMING
ERR_TRANSFORM_WITH_LENGTH_0
ERR_TTY_INIT_FAILED
ERR_UNAVAILABLE_DURING_EXIT
ERR_UNCAUGHT_EXCEPTION_CAPTURE_ALREADY_SET
ERR_UNESCAPED_CHARACTERS
ERR_UNHANDLED_ERROR
ERR_UNKNOWN_BUILTIN_MODULE
ERR_UNKNOWN_CREDENTIAL
ERR_UNKNOWN_ENCODING
ERR_UNKNOWN_FILE_EXTENSION
ERR_UNKNOWN_MODULE_FORMAT
ERR_UNKNOWN_SIGNAL
ERR_UNSUPPORTED_DIR_IMPORT
ERR_UNSUPPORTED_ESM_URL_SCHEME
ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING
ERR_UNSUPPORTED_RESOLVE_REQUEST
ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX
ERR_USE_AFTER_CLOSE
ERR_VALID_PERFORMANCE_ENTRY_TYPE
ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING
ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING_FLAG
ERR_VM_MODULE_ALREADY_LINKED
ERR_VM_MODULE_CACHED_DATA_REJECTED
ERR_VM_MODULE_CANNOT_CREATE_CACHED_DATA
ERR_VM_MODULE_DIFFERENT_CONTEXT
ERR_VM_MODULE_LINK_FAILURE
ERR_VM_MODULE_NOT_MODULE
ERR_VM_MODULE_STATUS
ERR_WASI_ALREADY_STARTED
ERR_WASI_NOT_STARTED
ERR_WEBASSEMBLY_RESPONSE
ERR_WORKER_INIT_FAILED
ERR_WORKER_INVALID_EXEC_ARGV
ERR_WORKER_MESSAGING_ERRORED
ERR_WORKER_MESSAGING_FAILED
ERR_WORKER_MESSAGING_SAME_THREAD
ERR_WORKER_MESSAGING_TIMEOUT
ERR_WORKER_NOT_RUNNING
ERR_WORKER_OUT_OF_MEMORY
ERR_WORKER_PATH
ERR_WORKER_UNSERIALIZABLE_ERROR
ERR_WORKER_UNSUPPORTED_OPERATION
ERR_ZLIB_INITIALIZATION_FAILED
ERR_ZSTD_INVALID_PARAM
HPE_CHUNK_EXTENSIONS_OVERFLOW
HPE_HEADER_OVERFLOW
HPE_UNEXPECTED_CONTENT_LENGTH
MODULE_NOT_FOUND
- 旧版 Node.js 错误码
ERR_CANNOT_TRANSFER_OBJECT
ERR_CPU_USAGE
ERR_CRYPTO_HASH_DIGEST_NO_UTF16
ERR_CRYPTO_SCRYPT_INVALID_PARAMETER
ERR_FS_INVALID_SYMLINK_TYPE
ERR_HTTP2_FRAME_ERROR
ERR_HTTP2_HEADERS_OBJECT
ERR_HTTP2_HEADER_REQUIRED
ERR_HTTP2_INFO_HEADERS_AFTER_RESPOND
ERR_HTTP2_STREAM_CLOSED
ERR_HTTP_INVALID_CHAR
ERR_IMPORT_ASSERTION_TYPE_FAILED
ERR_IMPORT_ASSERTION_TYPE_MISSING
ERR_IMPORT_ASSERTION_TYPE_UNSUPPORTED
ERR_INDEX_OUT_OF_RANGE
ERR_INVALID_OPT_VALUE
ERR_INVALID_OPT_VALUE_ENCODING
ERR_INVALID_PERFORMANCE_MARK
ERR_INVALID_TRANSFER_OBJECT
ERR_MANIFEST_ASSERT_INTEGRITY
ERR_MANIFEST_DEPENDENCY_MISSING
ERR_MANIFEST_INTEGRITY_MISMATCH
ERR_MANIFEST_INVALID_RESOURCE_FIELD
ERR_MANIFEST_INVALID_SPECIFIER
ERR_MANIFEST_PARSE_POLICY
ERR_MANIFEST_TDZ
ERR_MANIFEST_UNKNOWN_ONERROR
ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST
ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST
ERR_NAPI_CONS_PROTOTYPE_OBJECT
ERR_NAPI_TSFN_START_IDLE_LOOP
ERR_NAPI_TSFN_STOP_IDLE_LOOP
ERR_NO_LONGER_SUPPORTED
ERR_OUTOFMEMORY
ERR_PARSE_HISTORY_DATA
ERR_SOCKET_CANNOT_SEND
ERR_STDERR_CLOSE
ERR_STDOUT_CLOSE
ERR_STREAM_READ_NOT_IMPLEMENTED
ERR_TAP_LEXER_ERROR
ERR_TAP_PARSER_ERROR
ERR_TAP_VALIDATION_ERROR
ERR_TLS_RENEGOTIATION_FAILED
ERR_TRANSFERRING_EXTERNALIZED_SHAREDARRAYBUFFER
ERR_UNKNOWN_STDIN_TYPE
ERR_UNKNOWN_STREAM_TYPE
ERR_V8BREAKITERATOR
ERR_VALUE_OUT_OF_RANGE
ERR_VM_MODULE_LINKING_ERRORED
ERR_VM_MODULE_NOT_LINKED
ERR_WORKER_UNSUPPORTED_EXTENSION
ERR_ZLIB_BINDING_CLOSED
- OpenSSL 错误码
- 错误
-
索引
- 断言测试
- 异步上下文跟踪
- 异步钩子
- 缓冲区
- C++ 插件
- 使用 Node-API 的 C/C++ 插件
- C++ 嵌入器 API
- 子进程
- 集群
- 命令行选项
- 控制台
- 加密
- 调试器
- 已弃用的 API
- 诊断通道
- DNS
- 域
- 环境变量
- 错误
- 事件
- 文件系统
- 全局对象
- HTTP
- HTTP/2
- HTTPS
- 检查器
- 国际化
- 模块:CommonJS 模块
- 模块:ECMAScript 模块
- 模块:
node:module
API - 模块:包
- 模块:TypeScript
- 网络
- 操作系统
- 路径
- 性能钩子
- 权限
- 进程
- Punycode
- 查询字符串
- 逐行读取
- REPL
- 报告
- 单一可执行文件应用
- SQLite
- 流
- 字符串解码器
- 测试运行器
- 定时器
- TLS/SSL
- 跟踪事件
- TTY
- UDP/数据报
- URL
- 实用工具
- V8
- 虚拟机
- WASI
- Web Crypto API
- Web Streams API
- 工作线程
- Zlib
- 其他版本
- 选项
错误#
在 Node.js 中运行的应用程序通常会遇到以下几类错误:
- 标准的 JavaScript 错误,例如 <EvalError>、<SyntaxError>、<RangeError>、<ReferenceError>、<TypeError> 和 <URIError>。
- 标准的
DOMException
。 - 由底层操作系统约束触发的系统错误,例如尝试打开一个不存在的文件或尝试通过一个已关闭的套接字发送数据。
AssertionError
是一种特殊类型的错误,当 Node.js 检测到一个绝不应该发生的异常逻辑违规时触发。这些错误通常由node:assert
模块引发。- 由应用程序代码触发的用户指定错误。
所有由 Node.js 引发的 JavaScript 和系统错误都继承自或实例化自标准的 JavaScript <Error> 类,并保证至少提供该类上可用的属性。
由 Node.js 抛出的错误的 error.message
属性可能在任何版本中更改。请使用 error.code
来识别错误。对于 DOMException
,使用 domException.name
来识别其类型。
错误传播与拦截#
Node.js 支持多种机制来传播和处理应用程序运行时发生的错误。如何报告和处理这些错误完全取决于 Error
的类型和所调用 API 的风格。
所有 JavaScript 错误都作为异常处理,这些异常会使用标准的 JavaScript throw
机制立即生成并抛出一个错误。这些错误通过 JavaScript 语言提供的 try…catch
结构来处理。
// Throws with a ReferenceError because z is not defined.
try {
const m = 1;
const n = m + z;
} catch (err) {
// Handle the error here.
}
任何使用 JavaScript throw
机制都会引发一个异常,该异常必须被处理,否则 Node.js 进程将立即退出。
除了少数例外,同步 API(任何不返回 <Promise> 也不接受 callback
函数的阻塞方法,如 fs.readFileSync
)将使用 throw
来报告错误。
在异步 API 中发生的错误可能以多种方式报告:
-
一些异步方法返回一个 <Promise>,你应该始终考虑到它可能会被拒绝(rejected)。关于进程如何响应未处理的 promise rejection,请参阅
--unhandled-rejections
标志。const fs = require('node:fs/promises'); (async () => { let data; try { data = await fs.readFile('a file that does not exist'); } catch (err) { console.error('There was an error reading the file!', err); return; } // Otherwise handle the data })();
-
大多数接受
callback
函数的异步方法,会将一个Error
对象作为该函数的第一个参数传入。如果第一个参数不为null
并且是Error
的实例,那么就发生了一个应该被处理的错误。const fs = require('node:fs'); fs.readFile('a file that does not exist', (err, data) => { if (err) { console.error('There was an error reading the file!', err); return; } // Otherwise handle the data });
-
当在一个作为
EventEmitter
的对象上调用异步方法时,错误可以被路由到该对象的'error'
事件。const net = require('node:net'); const connection = net.connect('localhost'); // Adding an 'error' event handler to a stream: connection.on('error', (err) => { // If the connection is reset by the server, or if it can't // connect at all, or on any sort of error encountered by // the connection, the error will be sent here. console.error(err); }); connection.pipe(process.stdout);
-
Node.js API 中少数通常是异步的方法可能仍会使用
throw
机制来引发必须使用try…catch
处理的异常。没有此类方法的详尽列表;请参考每个方法的文档以确定所需的适当错误处理机制。
'error'
事件机制的使用最常见于基于流和基于事件发射器的 API,这些 API 本身代表了一系列随时间发生的异步操作(而不是可能成功或失败的单个操作)。
对于所有 EventEmitter
对象,如果没有提供 'error'
事件处理程序,错误将被抛出,导致 Node.js 进程报告一个未捕获的异常并崩溃,除非:为 'uncaughtException'
事件注册了处理程序,或者使用了已废弃的 node:domain
模块。
const EventEmitter = require('node:events');
const ee = new EventEmitter();
setImmediate(() => {
// This will crash the process because no 'error' event
// handler has been added.
ee.emit('error', new Error('This will crash'));
});
以这种方式生成的错误不能使用 try…catch
拦截,因为它们是在调用代码已经退出之后抛出的。
开发者必须参考每个方法的文档,以确定这些方法引发的错误是如何传播的。
类:Error
#
一个通用的 JavaScript <Error> 对象,不表示任何发生错误的具体情况。Error
对象捕获一个“堆栈跟踪”,详细说明了 Error
被实例化时在代码中的位置,并可能提供错误的文本描述。
所有由 Node.js 生成的错误,包括所有系统和 JavaScript 错误,都将是 Error
类的实例或继承自该类。
new Error(message[, options])
#
创建一个新的 Error
对象,并将 error.message
属性设置为提供的文本消息。如果将一个对象作为 message
传递,则通过调用 String(message)
生成文本消息。如果提供了 cause
选项,它将被赋给 error.cause
属性。error.stack
属性将表示 new Error()
被调用时在代码中的位置。堆栈跟踪依赖于 V8 的堆栈跟踪 API。堆栈跟踪仅延伸至(a)同步代码执行的开始,或(b)由 Error.stackTraceLimit
属性给出的帧数,以较小者为准。
Error.captureStackTrace(targetObject[, constructorOpt])
#
targetObject
<Object>constructorOpt
<Function>
在 targetObject
上创建一个 .stack
属性,当访问该属性时,它返回一个字符串,表示 Error.captureStackTrace()
被调用时在代码中的位置。
const myObject = {};
Error.captureStackTrace(myObject);
myObject.stack; // Similar to `new Error().stack`
跟踪的第一行将以 ${myObject.name}: ${myObject.message}
为前缀。
可选的 constructorOpt
参数接受一个函数。如果给出,所有在 constructorOpt
之上的帧,包括 constructorOpt
本身,都将从生成的堆栈跟踪中省略。
constructorOpt
参数对于向用户隐藏错误生成的实现细节很有用。例如:
function a() {
b();
}
function b() {
c();
}
function c() {
// Create an error without stack trace to avoid calculating the stack trace twice.
const { stackTraceLimit } = Error;
Error.stackTraceLimit = 0;
const error = new Error();
Error.stackTraceLimit = stackTraceLimit;
// Capture the stack trace above function b
Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace
throw error;
}
a();
Error.stackTraceLimit
#
- 类型:<number>
Error.stackTraceLimit
属性指定了堆栈跟踪收集的堆栈帧数(无论是通过 new Error().stack
还是 Error.captureStackTrace(obj)
生成的)。
默认值是 10
,但可以设置为任何有效的 JavaScript 数字。更改将影响在值更改之后捕获的任何堆栈跟踪。
如果设置为非数字值或负数,堆栈跟踪将不捕获任何帧。
error.cause
#
- 类型:<any>
如果存在,error.cause
属性是 Error
的根本原因。当捕获一个错误并抛出一个具有不同消息或代码的新错误时,可以使用它来仍然访问原始错误。
error.cause
属性通常通过调用 new Error(message, { cause })
来设置。如果未提供 cause
选项,构造函数不会设置此属性。
此属性允许错误链。当序列化 Error
对象时,如果设置了 error.cause
,util.inspect()
会递归地序列化它。
const cause = new Error('The remote HTTP server responded with a 500 status');
const symptom = new Error('The message failed to send', { cause });
console.log(symptom);
// Prints:
// Error: The message failed to send
// at REPL2:1:17
// at Script.runInThisContext (node:vm:130:12)
// ... 7 lines matching cause stack trace ...
// at [_line] [as _line] (node:internal/readline/interface:886:18) {
// [cause]: Error: The remote HTTP server responded with a 500 status
// at REPL1:1:15
// at Script.runInThisContext (node:vm:130:12)
// at REPLServer.defaultEval (node:repl:574:29)
// at bound (node:domain:426:15)
// at REPLServer.runBound [as eval] (node:domain:437:12)
// at REPLServer.onLine (node:repl:902:10)
// at REPLServer.emit (node:events:549:35)
// at REPLServer.emit (node:domain:482:12)
// at [_onLine] [as _onLine] (node:internal/readline/interface:425:12)
// at [_line] [as _line] (node:internal/readline/interface:886:18)
error.code
#
- 类型:<string>
error.code
属性是一个字符串标签,用于标识错误的类型。error.code
是识别错误最稳定的方式。它只会在 Node.js 的主版本之间更改。相比之下,error.message
字符串可能在任何 Node.js 版本之间更改。有关特定代码的详细信息,请参见 Node.js 错误码。
error.message
#
- 类型:<string>
error.message
属性是通过调用 new Error(message)
设置的错误的字符串描述。传递给构造函数的 message
也将出现在 Error
堆栈跟踪的第一行,但是,在 Error
对象创建后更改此属性可能不会更改堆栈跟踪的第一行(例如,当在更改此属性之前读取 error.stack
时)。
const err = new Error('The message');
console.error(err.message);
// Prints: The message
error.stack
#
- 类型:<string>
error.stack
属性是一个字符串,描述了 Error
被实例化时在代码中的位置。
Error: Things keep happening!
at /home/gbusey/file.js:525:2
at Frobnicator.refrobulate (/home/gbusey/business-logic.js:424:21)
at Actor.<anonymous> (/home/gbusey/actors.js:400:8)
at increaseSynergy (/home/gbusey/actors.js:701:6)
第一行格式为 <错误类名>: <错误消息>
,后面跟着一系列堆栈帧(每行以 "at " 开头)。每个帧描述了代码中导致错误生成的调用点。V8 尝试为每个函数显示一个名称(通过变量名、函数名或对象方法名),但有时它无法找到合适的名称。如果 V8 无法确定函数的名称,则该帧将只显示位置信息。否则,确定的函数名将与附加在括号中的位置信息一起显示。
帧仅为 JavaScript 函数生成。例如,如果执行同步地通过一个名为 cheetahify
的 C++ 插件函数,而该函数本身又调用了一个 JavaScript 函数,那么代表 cheetahify
调用的帧将不会出现在堆栈跟踪中:
const cheetahify = require('./native-binding.node');
function makeFaster() {
// `cheetahify()` *synchronously* calls speedy.
cheetahify(function speedy() {
throw new Error('oh no!');
});
}
makeFaster();
// will throw:
// /home/gbusey/file.js:6
// throw new Error('oh no!');
// ^
// Error: oh no!
// at speedy (/home/gbusey/file.js:6:11)
// at makeFaster (/home/gbusey/file.js:5:3)
// at Object.<anonymous> (/home/gbusey/file.js:10:1)
// at Module._compile (module.js:456:26)
// at Object.Module._extensions..js (module.js:474:10)
// at Module.load (module.js:356:32)
// at Function.Module._load (module.js:312:12)
// at Function.Module.runMain (module.js:497:10)
// at startup (node.js:119:16)
// at node.js:906:3
位置信息将是以下之一:
native
,如果该帧代表 V8 内部的调用(如[].forEach
)。plain-filename.js:line:column
,如果该帧代表 Node.js 内部的调用。/absolute/path/to/file.js:line:column
,如果该帧代表用户程序(使用 CommonJS 模块系统)或其依赖项中的调用。<transport-protocol>:///url/to/module/file.mjs:line:column
,如果该帧代表用户程序(使用 ES 模块系统)或其依赖项中的调用。
表示堆栈跟踪的字符串是在 error.stack
属性被访问时延迟生成的。
堆栈跟踪捕获的帧数受 Error.stackTraceLimit
或当前事件循环 tick 上可用帧数的较小者限制。
类:AssertionError
#
- 继承自:<errors.Error>
表示断言失败。详情请见 类:assert.AssertionError
。
类:RangeError
#
- 继承自:<errors.Error>
表示提供的参数不在函数可接受的值集或范围内;无论是数值范围,还是给定函数参数的选项集之外。
require('node:net').connect(-1);
// Throws "RangeError: "port" option should be >= 0 and < 65536: -1"
Node.js 会作为参数验证的一种形式立即生成并抛出 RangeError
实例。
类:ReferenceError
#
- 继承自:<errors.Error>
表示正在尝试访问一个未定义的变量。此类错误通常表示代码中的拼写错误或其他损坏的程序。
虽然客户端代码可以生成和传播这些错误,但在实践中,只有 V8 会这样做。
doesNotExist;
// Throws ReferenceError, doesNotExist is not a variable in this program.
除非应用程序是动态生成和运行代码,否则 ReferenceError
实例表示代码或其依赖项中存在 bug。
类:SyntaxError
#
- 继承自:<errors.Error>
表示程序不是有效的 JavaScript。这些错误只能在代码评估的结果中生成和传播。代码评估可能由于 eval
、Function
、require
或 vm 而发生。这些错误几乎总是表示一个损坏的程序。
try {
require('node:vm').runInThisContext('binary ! isNotOk');
} catch (err) {
// 'err' will be a SyntaxError.
}
SyntaxError
实例在创建它们的上下文中是不可恢复的——它们只能被其他上下文捕获。
类:SystemError
#
- 继承自:<errors.Error>
Node.js 在其运行时环境中发生异常时会生成系统错误。这些通常发生在应用程序违反操作系统约束时。例如,如果应用程序尝试读取一个不存在的文件,就会发生系统错误。
address
<string> 如果存在,网络连接失败的地址code
<string> 字符串错误代码dest
<string> 如果存在,报告文件系统错误时的目标文件路径errno
<number> 系统提供的错误号info
<Object> 如果存在,关于错误状况的额外详情message
<string> 系统提供的可读错误描述path
<string> 如果存在,报告文件系统错误时的文件路径port
<number> 如果存在,不可用的网络连接端口syscall
<string> 触发错误的系统调用的名称
error.errno
#
- 类型:<number>
error.errno
属性是一个负数,对应于 libuv 错误处理
中定义的错误代码。
在 Windows 上,系统提供的错误号将由 libuv 进行规范化。
要获取错误代码的字符串表示形式,请使用 util.getSystemErrorName(error.errno)
。
常见系统错误#
这是编写 Node.js 程序时常遇到的系统错误列表。有关完整列表,请参见 errno
(3) 手册页。
-
EACCES
(Permission denied): 尝试以文件访问权限禁止的方式访问文件。 -
EADDRINUSE
(Address already in use): 尝试将服务器(net
、http
或https
)绑定到本地地址失败,因为本地系统上的另一个服务器已占用该地址。 -
ECONNREFUSED
(Connection refused): 无法建立连接,因为目标机器主动拒绝了它。这通常是由于尝试连接到外部主机上不活动的服务造成的。 -
ECONNRESET
(Connection reset by peer): 连接被对等方强制关闭。这通常是由于远程套接字上的连接因超时或重启而丢失造成的。通常通过http
和net
模块遇到。 -
EEXIST
(File exists): 一个现有文件是一个要求目标不存在的操作的目标。 -
EISDIR
(Is a directory): 一个操作期望的是一个文件,但给定的路径名是一个目录。 -
EMFILE
(Too many open files in system): 系统上允许的文件描述符最大数量已达到,并且在至少关闭一个之前无法满足另一个描述符的请求。这在并行打开许多文件时会遇到,尤其是在进程的文件描述符限制较低的系统(特别是 macOS)上。要解决低限制问题,请在将运行 Node.js 进程的同一 shell 中运行ulimit -n 2048
。 -
ENOENT
(No such file or directory): 通常由fs
操作引发,表示指定路径名的某个组件不存在。给定路径下找不到任何实体(文件或目录)。 -
ENOTDIR
(Not a directory): 给定路径名的组件存在,但不是预期的目录。通常由fs.readdir
引发。 -
ENOTEMPTY
(Directory not empty): 一个有条目的目录是一个需要空目录的操作的目标,通常是fs.unlink
。 -
ENOTFOUND
(DNS lookup failed): 表示EAI_NODATA
或EAI_NONAME
的 DNS 失败。这不是一个标准的 POSIX 错误。 -
EPERM
(Operation not permitted): 尝试执行需要提升权限的操作。 -
EPIPE
(Broken pipe): 在一个没有进程读取数据的管道、套接字或 FIFO 上的写操作。通常在net
和http
层遇到,表明正在写入的流的远程端已关闭。 -
ETIMEDOUT
(Operation timed out): 连接或发送请求失败,因为连接方在一段时间后没有正确响应。通常由http
或net
遇到。通常是未正确调用socket.end()
的迹象。
类:TypeError
#
- 继承自 <errors.Error>
表示提供的参数不是允许的类型。例如,将一个函数传递给一个期望字符串的参数将是 TypeError
。
require('node:url').parse(() => { });
// Throws TypeError, since it expected a string.
Node.js 会作为参数验证的一种形式立即生成并抛出 TypeError
实例。
异常 vs. 错误#
JavaScript 异常是由于无效操作或作为 throw
语句的目标而抛出的值。虽然不要求这些值是 Error
的实例或继承自 Error
的类,但 Node.js 或 JavaScript 运行时抛出的所有异常都将是 Error
的实例。
有些异常在 JavaScript 层是不可恢复的。此类异常将总是导致 Node.js 进程崩溃。例如 C++ 层的 assert()
检查或 abort()
调用。
OpenSSL 错误#
源于 crypto
或 tls
的错误属于 Error
类,除了标准的 .code
和 .message
属性外,还可能有一些额外的 OpenSSL 特定属性。
error.opensslErrorStack
#
一个错误数组,可以提供错误在 OpenSSL 库中源于何处的上下文。
error.function
#
错误源于的 OpenSSL 函数。
error.library
#
错误源于的 OpenSSL 库。
Node.js 错误码#
ABORT_ERR
#
当一个操作被中止时使用(通常使用 AbortController
)。
不使用 AbortSignal
的 API 通常不会引发此代码的错误。
此代码不使用 Node.js 错误使用的常规 ERR_*
约定,以与 Web 平台的 AbortError
兼容。
ERR_AMBIGUOUS_ARGUMENT
#
函数参数的使用方式表明函数签名可能被误解了。当 node:assert
模块中 assert.throws(block, message)
的 message
参数与 block
抛出的错误消息匹配时,会抛出此错误,因为这种用法表明用户认为 message
是预期的消息,而不是在 block
未抛出时 AssertionError
将显示的消息。
ERR_BUFFER_CONTEXT_NOT_AVAILABLE
#
尝试从插件或嵌入器代码中创建一个 Node.js Buffer
实例,而此时所在的 JS 引擎上下文并未与 Node.js 实例关联。传递给 Buffer
方法的数据在方法返回时已经被释放。
遇到此错误时,创建 Buffer
实例的一个可能替代方案是创建一个普通的 Uint8Array
,它只在结果对象的原型上有所不同。Uint8Array
通常在所有 Node.js 核心 API 中被接受,在这些 API 中 Buffer
也是可用的;它们在所有上下文中都可用。
ERR_CONTEXT_NOT_INITIALIZED
#
传入 API 的 vm 上下文尚未初始化。这可能在创建上下文期间发生错误(并被捕获)时发生,例如,当分配失败或在创建上下文时达到最大调用堆栈大小时。
ERR_CRYPTO_CUSTOM_ENGINE_NOT_SUPPORTED
#
请求了一个 OpenSSL 引擎(例如,通过 clientCertEngine
或 privateKeyEngine
TLS 选项),但当前使用的 OpenSSL 版本不支持该引擎,可能是因为编译时标志 OPENSSL_NO_ENGINE
。
ERR_CRYPTO_ECDH_INVALID_PUBLIC_KEY
#
向 crypto.ECDH()
类的 computeSecret()
方法传递了无效的 key
参数值。这意味着公钥位于椭圆曲线之外。
ERR_CRYPTO_TIMING_SAFE_EQUAL_LENGTH
#
使用不同长度的 Buffer
、TypedArray
或 DataView
参数调用了 crypto.timingSafeEqual()
。
ERR_DOMAIN_CALLBACK_NOT_AVAILABLE
#
node:domain
模块不可用,因为它无法建立所需的错误处理钩子,因为 process.setUncaughtExceptionCaptureCallback()
已在较早的时间点被调用。
ERR_DOMAIN_CANNOT_SET_UNCAUGHT_EXCEPTION_CAPTURE
#
无法调用 process.setUncaughtExceptionCaptureCallback()
,因为 node:domain
模块已在较早的时间点加载。
堆栈跟踪被扩展以包含 node:domain
模块被加载的时间点。
ERR_DUPLICATE_STARTUP_SNAPSHOT_MAIN_FUNCTION
#
无法调用 v8.startupSnapshot.setDeserializeMainFunction()
,因为它之前已经被调用过。
ERR_EXECUTION_ENVIRONMENT_NOT_AVAILABLE
#
JS 执行上下文未与 Node.js 环境关联。当 Node.js 作为嵌入式库使用且 JS 引擎的某些钩子未正确设置时,可能会发生这种情况。
ERR_FS_FILE_TOO_LARGE
#
尝试读取一个大于 fs.readFile()
所支持的 2 GiB 限制的文件。这不是 Buffer
的限制,而是一个内部 I/O 约束。要处理更大的文件,请考虑使用 fs.createReadStream()
来分块读取文件。
ERR_HTTP2_INVALID_PACKED_SETTINGS_LENGTH
#
传递给 http2.getUnpackedSettings()
API 的输入 Buffer
和 Uint8Array
实例的长度必须是六的倍数。
ERR_HTTP2_MAX_PENDING_SETTINGS_ACK
#
每当向连接的对等方发送 HTTP/2 SETTINGS
帧时,对等方需要发送一个确认,表示它已收到并应用了新的 SETTINGS
。默认情况下,在任何给定时间可以发送的最大未确认 SETTINGS
帧数是有限制的。当达到该限制时,使用此错误代码。
ERR_HTTP2_SEND_FILE_NOSEEK
#
尝试使用 Http2Stream.prototype.responseWithFile()
API 发送除常规文件以外的内容,但提供了 offset
或 length
选项。
ERR_HTTP2_SOCKET_BOUND
#
尝试将一个 Http2Session
对象连接到一个已经绑定到另一个 Http2Session
对象的 net.Socket
或 tls.TLSSocket
。
ERR_HTTP2_TOO_MANY_INVALID_FRAMES
#
对等方发送的可接受的无效 HTTP/2 协议帧的数量限制(通过 maxSessionInvalidFrames
选项指定)已被超出。
ERR_HTTP2_TRAILERS_NOT_READY
#
在 Http2Stream
对象上触发 'wantTrailers'
事件之后才能调用 http2stream.sendTrailers()
方法。只有当为 Http2Stream
设置了 waitForTrailers
选项时,才会触发 'wantTrailers'
事件。
ERR_INSPECTOR_ALREADY_ACTIVATED
#
在使用 node:inspector
模块时,尝试在检查器已经开始在某个端口上监听时激活它。在另一个地址上激活它之前,请使用 inspector.close()
。
ERR_INTERNAL_ASSERTION
#
Node.js 中存在一个 bug 或对 Node.js 内部函数的使用不正确。要修复此错误,请在 https://github.com/nodejs/node/issues 上提出一个问题。
ERR_INVALID_FILE_URL_HOST
#
一个使用 file:
URL 的 Node.js API(例如 fs
模块中的某些函数)遇到了一个带有不兼容主机的 file URL。这种情况只可能在类 Unix 系统上发生,其中只支持 localhost
或空主机。
ERR_INVALID_FILE_URL_PATH
#
一个使用 file:
URL 的 Node.js API(例如 fs
模块中的某些函数)遇到了一个带有不兼容路径的 file URL。确定路径是否可用的确切语义取决于平台。
抛出的错误对象包含一个 input
属性,其中包含无效 file:
URL 的 URL 对象。
ERR_INVALID_SYNC_FORK_INPUT
#
将 Buffer
、TypedArray
、DataView
或 string
作为 stdio 输入提供给了一个异步的 fork。更多信息请参阅 child_process
模块的文档。
ERR_INVALID_THIS
#
使用不兼容的 this
值调用了 Node.js API 函数。
const urlSearchParams = new URLSearchParams('foo=bar&baz=new');
const buf = Buffer.alloc(1);
urlSearchParams.has.call(buf, 'foo');
// Throws a TypeError with code 'ERR_INVALID_THIS'
ERR_INVALID_TUPLE
#
提供给 WHATWG URLSearchParams
构造函数 的 iterable
中的一个元素不代表 [name, value]
元组——也就是说,如果一个元素不可迭代,或者不恰好包含两个元素。
ERR_INVALID_URL
#
向 WHATWG URL
构造函数 或旧版 url.parse()
传递了无效的 URL 进行解析。抛出的错误对象通常有一个额外的属性 'input'
,其中包含解析失败的 URL。
ERR_INVALID_URL_SCHEME
#
尝试为特定目的使用不兼容方案(协议)的 URL。它仅用于 fs
模块中的 WHATWG URL API 支持(它只接受带有 'file'
方案的 URL),但将来也可能在其他 Node.js API 中使用。
ERR_MESSAGE_TARGET_CONTEXT_UNAVAILABLE
#
发布到 MessagePort
的消息无法在目标 vm Context
中反序列化。目前并非所有 Node.js 对象都能在任何上下文中成功实例化,在这种情况下,尝试使用 postMessage()
传输它们可能会在接收端失败。
ERR_MISSING_ARGS
#
Node.js API 的一个必需参数未被传递。这仅用于严格遵守 API 规范(在某些情况下可能接受 func(undefined)
但不接受 func()
)。在大多数原生 Node.js API 中,func(undefined)
和 func()
被同等对待,并且可能会改用 ERR_INVALID_ARG_TYPE
错误代码。
ERR_MISSING_PLATFORM_FOR_WORKER
#
此 Node.js 实例使用的 V8 平台不支持创建 Worker。这是由于嵌入器对 Worker 的支持不足造成的。特别地,这个错误不会在 Node.js 的标准构建中发生。
ERR_NAPI_INVALID_DATAVIEW_ARGS
#
在调用 napi_create_dataview()
时,给定的 offset
超出了数据视图的边界,或者 offset + length
大于给定 buffer
的长度。
ERR_NAPI_INVALID_TYPEDARRAY_LENGTH
#
在调用 napi_create_typedarray()
时,(length * size_of_element) + byte_offset
大于给定 buffer
的长度。
ERR_PACKAGE_PATH_NOT_EXPORTED
#
package.json
的 "exports"
字段未导出请求的子路径。由于导出是封装的,未导出的私有内部模块无法通过包解析导入,除非使用绝对 URL。
ERR_PARSE_ARGS_INVALID_OPTION_VALUE
#
当 strict
设置为 true
时,如果为类型为 <string> 的选项提供了 <boolean> 值,或者为类型为 <boolean> 的选项提供了 <string> 值,则由 util.parseArgs()
抛出。
ERR_PROTO_ACCESS
#
使用 --disable-proto=throw
禁止了对 Object.prototype.__proto__
的访问。应使用 Object.getPrototypeOf
和 Object.setPrototypeOf
来获取和设置对象的原型。
ERR_REQUIRE_ASYNC_MODULE
#
当尝试 require()
一个 ES 模块时,发现该模块是异步的。也就是说,它包含顶层 await。
要查看顶层 await 的位置,请使用 --experimental-print-required-tla
(这将在查找顶层 await 之前执行模块)。
ERR_REQUIRE_CYCLE_MODULE
#
当尝试 require()
一个 ES 模块时,一个 CommonJS 到 ESM 或 ESM 到 CommonJS 的边界参与了一个直接循环。这是不允许的,因为 ES 模块不能在已经被评估时再次评估。
为避免循环,循环中涉及的 require()
调用不应发生在 ES 模块(通过 createRequire()
)或 CommonJS 模块的顶层,而应在内部函数中惰性执行。
ERR_REQUIRE_ESM
#
尝试 require()
一个 ES 模块。
此错误已被弃用,因为 require()
现在支持加载同步 ES 模块。当 require()
遇到包含顶层 await
的 ES 模块时,它将抛出 ERR_REQUIRE_ASYNC_MODULE
。
ERR_SERVER_ALREADY_LISTEN
#
在 net.Server
已经处于监听状态时调用了 server.listen()
方法。这适用于所有 net.Server
实例,包括 HTTP、HTTPS 和 HTTP/2 Server
实例。
ERR_SERVER_NOT_RUNNING
#
在 net.Server
未运行时调用了 server.close()
方法。这适用于所有 net.Server
实例,包括 HTTP、HTTPS 和 HTTP/2 Server
实例。
ERR_SOCKET_BAD_BUFFER_SIZE
#
在 dgram.createSocket()
中为 recvBufferSize
或 sendBufferSize
选项传递了无效的(负数)大小。
ERR_SOURCE_PHASE_NOT_DEFINED
#
提供的模块导入没有为源阶段导入语法 import source x from 'x'
或 import.source(x)
提供源阶段导入表示。
ERR_STREAM_WRAP
#
如果在 Socket 上设置了字符串解码器,或者解码器处于 objectMode
,则防止中止。
const Socket = require('node:net').Socket;
const instance = new Socket();
instance.setEncoding('utf8');
ERR_TLS_ALPN_CALLBACK_WITH_PROTOCOLS
#
如果 TLS 选项同时包含 ALPNProtocols
和 ALPNCallback
,则在创建 TLSServer
时会抛出此错误。这些选项是互斥的。
ERR_TLS_CERT_ALTNAME_FORMAT
#
如果用户提供的 subjectaltname
属性违反了编码规则,则 checkServerIdentity
会抛出此错误。Node.js 本身生成的证书对象始终符合编码规则,永远不会导致此错误。
ERR_TLS_DH_PARAM_SIZE
#
在使用 TLS 时,为 Diffie-Hellman (DH
) 密钥协商协议提供的参数太小。为避免漏洞,默认情况下密钥长度必须大于或等于 1024 位,尽管强烈建议使用 2048 位或更大以获得更强的安全性。
ERR_TLS_PROTOCOL_VERSION_CONFLICT
#
尝试设置 TLS 协议的 minVersion
或 maxVersion
与明确设置 secureProtocol
的尝试相冲突。请使用其中一种机制。
ERR_TRAILING_JUNK_AFTER_STREAM_END
#
在压缩流结束后发现尾随垃圾数据。当在压缩流(例如,zlib 或 gzip 解压缩)结束后检测到额外、意外的数据时,会抛出此错误。
ERR_UNCAUGHT_EXCEPTION_CAPTURE_ALREADY_SET
#
process.setUncaughtExceptionCaptureCallback()
被调用了两次,而没有先将回调重置为 null
。
此错误旨在防止意外覆盖从其他模块注册的回调。
ERR_UNSUPPORTED_DIR_IMPORT
#
不支持 import
目录 URL。请改为使用包名自引用一个包,并在 package.json
文件的 "exports"
字段中定义一个自定义子路径。
import './'; // unsupported
import './index.js'; // supported
import 'package-name'; // supported
ERR_UNSUPPORTED_RESOLVE_REQUEST
#
尝试解析一个无效的模块引用者。当导入或调用 import.meta.resolve()
时,如果出现以下情况,可能会发生此错误:
try {
// Trying to import the package 'bare-specifier' from a `data:` URL module:
await import('data:text/javascript,import "bare-specifier"');
} catch (e) {
console.log(e.code); // ERR_UNSUPPORTED_RESOLVE_REQUEST
}
ERR_VM_MODULE_ALREADY_LINKED
#
尝试链接的模块不符合链接条件,原因如下之一:
- 它已经被链接 (
linkingStatus
为'linked'
) - 它正在被链接 (
linkingStatus
为'linking'
) - 此模块的链接失败 (
linkingStatus
为'errored'
)
ERR_WEBASSEMBLY_RESPONSE
#
传递给 WebAssembly.compileStreaming
或 WebAssembly.instantiateStreaming
的 Response
不是一个有效的 WebAssembly 响应。
HPE_HEADER_OVERFLOW
#
接收到的 HTTP 标头数据过多。为了防止恶意或配置不当的客户端,如果接收到的 HTTP 标头数据超过 maxHeaderSize
,HTTP 解析将中止,不会创建请求或响应对象,并会发出一个带有此代码的 Error
。
HPE_UNEXPECTED_CONTENT_LENGTH
#
服务器同时发送了 Content-Length
标头和 Transfer-Encoding: chunked
。
Transfer-Encoding: chunked
允许服务器为动态生成的内容维持一个 HTTP 持久连接。在这种情况下,不能使用 Content-Length
HTTP 标头。
请使用 Content-Length
或 Transfer-Encoding: chunked
。
旧版 Node.js 错误码#
ERR_CRYPTO_HASH_DIGEST_NO_UTF16
#
UTF-16 编码与 hash.digest()
一起使用。虽然 hash.digest()
方法允许传入 encoding
参数,使方法返回一个字符串而不是 Buffer
,但不支持 UTF-16 编码(例如 ucs
或 utf16le
)。
ERR_CRYPTO_SCRYPT_INVALID_PARAMETER
#
向 crypto.scrypt()
或 crypto.scryptSync()
传递了不兼容的选项组合。新版本的 Node.js 使用错误码 ERR_INCOMPATIBLE_OPTION_PAIR
,这与其他 API 一致。
ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST
#
此错误代码在 Node.js v15.0.0 中已被 ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST
替换,因为它已不再准确,因为现在也存在其他类型的可传输对象。
ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST
#
一个需要显式列在 transferList
参数中的对象,出现在传递给 postMessage()
调用的对象中,但未在该调用的 transferList
中提供。通常,这是一个 MessagePort
。
在 v15.0.0 之前的 Node.js 版本中,此处使用的错误代码是 ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST
。然而,可传输对象的类型集合已经扩展,覆盖了比 MessagePort
更多的类型。
ERR_NO_LONGER_SUPPORTED
#
一个 Node.js API 以不支持的方式被调用,例如 Buffer.write(string, encoding, offset[, length])
。
ERR_TRANSFERRING_EXTERNALIZED_SHAREDARRAYBUFFER
#
在序列化期间遇到了一个其内存不由 JavaScript 引擎或 Node.js 管理的 SharedArrayBuffer
。这样的 SharedArrayBuffer
无法被序列化。
这只可能在原生插件以“外部化”模式创建 SharedArrayBuffer
,或将现有的 SharedArrayBuffer
置于外部化模式时发生。
ERR_UNKNOWN_STREAM_TYPE
#
试图使用未知的 stdout
或 stderr
文件类型启动 Node.js 进程。此错误通常表示 Node.js 自身的 bug,尽管用户代码也可能触发它。