Node.js v25.0.0 文件
- Node.js v25.0.0
-
目錄
- 錯誤
- 錯誤傳播與攔截
- 類:
Error - 類:
AssertionError - 類:
RangeError - 類:
ReferenceError - 類:
SyntaxError - 類:
SystemError - 類:
TypeError - 異常 vs. 錯誤
- OpenSSL 錯誤
- Node.js 錯誤碼
ABORT_ERRERR_ACCESS_DENIEDERR_AMBIGUOUS_ARGUMENTERR_ARG_NOT_ITERABLEERR_ASSERTIONERR_ASYNC_CALLBACKERR_ASYNC_TYPEERR_BROTLI_COMPRESSION_FAILEDERR_BROTLI_INVALID_PARAMERR_BUFFER_CONTEXT_NOT_AVAILABLEERR_BUFFER_OUT_OF_BOUNDSERR_BUFFER_TOO_LARGEERR_CANNOT_WATCH_SIGINTERR_CHILD_CLOSED_BEFORE_REPLYERR_CHILD_PROCESS_IPC_REQUIREDERR_CHILD_PROCESS_STDIO_MAXBUFFERERR_CLOSED_MESSAGE_PORTERR_CONSOLE_WRITABLE_STREAMERR_CONSTRUCT_CALL_INVALIDERR_CONSTRUCT_CALL_REQUIREDERR_CONTEXT_NOT_INITIALIZEDERR_CPU_PROFILE_ALREADY_STARTEDERR_CPU_PROFILE_NOT_STARTEDERR_CPU_PROFILE_TOO_MANYERR_CRYPTO_ARGON2_NOT_SUPPORTEDERR_CRYPTO_CUSTOM_ENGINE_NOT_SUPPORTEDERR_CRYPTO_ECDH_INVALID_FORMATERR_CRYPTO_ECDH_INVALID_PUBLIC_KEYERR_CRYPTO_ENGINE_UNKNOWNERR_CRYPTO_FIPS_FORCEDERR_CRYPTO_FIPS_UNAVAILABLEERR_CRYPTO_HASH_FINALIZEDERR_CRYPTO_HASH_UPDATE_FAILEDERR_CRYPTO_INCOMPATIBLE_KEYERR_CRYPTO_INCOMPATIBLE_KEY_OPTIONSERR_CRYPTO_INITIALIZATION_FAILEDERR_CRYPTO_INVALID_AUTH_TAGERR_CRYPTO_INVALID_COUNTERERR_CRYPTO_INVALID_CURVEERR_CRYPTO_INVALID_DIGESTERR_CRYPTO_INVALID_IVERR_CRYPTO_INVALID_JWKERR_CRYPTO_INVALID_KEYLENERR_CRYPTO_INVALID_KEYPAIRERR_CRYPTO_INVALID_KEYTYPEERR_CRYPTO_INVALID_KEY_OBJECT_TYPEERR_CRYPTO_INVALID_MESSAGELENERR_CRYPTO_INVALID_SCRYPT_PARAMSERR_CRYPTO_INVALID_STATEERR_CRYPTO_INVALID_TAG_LENGTHERR_CRYPTO_JOB_INIT_FAILEDERR_CRYPTO_JWK_UNSUPPORTED_CURVEERR_CRYPTO_JWK_UNSUPPORTED_KEY_TYPEERR_CRYPTO_KEM_NOT_SUPPORTEDERR_CRYPTO_OPERATION_FAILEDERR_CRYPTO_PBKDF2_ERRORERR_CRYPTO_SCRYPT_NOT_SUPPORTEDERR_CRYPTO_SIGN_KEY_REQUIREDERR_CRYPTO_TIMING_SAFE_EQUAL_LENGTHERR_CRYPTO_UNKNOWN_CIPHERERR_CRYPTO_UNKNOWN_DH_GROUPERR_CRYPTO_UNSUPPORTED_OPERATIONERR_DEBUGGER_ERRORERR_DEBUGGER_STARTUP_ERRORERR_DIR_CLOSEDERR_DIR_CONCURRENT_OPERATIONERR_DLOPEN_DISABLEDERR_DLOPEN_FAILEDERR_DNS_SET_SERVERS_FAILEDERR_DOMAIN_CALLBACK_NOT_AVAILABLEERR_DOMAIN_CANNOT_SET_UNCAUGHT_EXCEPTION_CAPTUREERR_DUPLICATE_STARTUP_SNAPSHOT_MAIN_FUNCTIONERR_ENCODING_INVALID_ENCODED_DATAERR_ENCODING_NOT_SUPPORTEDERR_EVAL_ESM_CANNOT_PRINTERR_EVENT_RECURSIONERR_EXECUTION_ENVIRONMENT_NOT_AVAILABLEERR_FALSY_VALUE_REJECTIONERR_FEATURE_UNAVAILABLE_ON_PLATFORMERR_FS_CP_DIR_TO_NON_DIRERR_FS_CP_EEXISTERR_FS_CP_EINVALERR_FS_CP_FIFO_PIPEERR_FS_CP_NON_DIR_TO_DIRERR_FS_CP_SOCKETERR_FS_CP_SYMLINK_TO_SUBDIRECTORYERR_FS_CP_UNKNOWNERR_FS_EISDIRERR_FS_FILE_TOO_LARGEERR_FS_WATCH_QUEUE_OVERFLOWERR_HTTP2_ALTSVC_INVALID_ORIGINERR_HTTP2_ALTSVC_LENGTHERR_HTTP2_CONNECT_AUTHORITYERR_HTTP2_CONNECT_PATHERR_HTTP2_CONNECT_SCHEMEERR_HTTP2_ERRORERR_HTTP2_GOAWAY_SESSIONERR_HTTP2_HEADERS_AFTER_RESPONDERR_HTTP2_HEADERS_SENTERR_HTTP2_HEADER_SINGLE_VALUEERR_HTTP2_INFO_STATUS_NOT_ALLOWEDERR_HTTP2_INVALID_CONNECTION_HEADERSERR_HTTP2_INVALID_HEADER_VALUEERR_HTTP2_INVALID_INFO_STATUSERR_HTTP2_INVALID_ORIGINERR_HTTP2_INVALID_PACKED_SETTINGS_LENGTHERR_HTTP2_INVALID_PSEUDOHEADERERR_HTTP2_INVALID_SESSIONERR_HTTP2_INVALID_SETTING_VALUEERR_HTTP2_INVALID_STREAMERR_HTTP2_MAX_PENDING_SETTINGS_ACKERR_HTTP2_NESTED_PUSHERR_HTTP2_NO_MEMERR_HTTP2_NO_SOCKET_MANIPULATIONERR_HTTP2_ORIGIN_LENGTHERR_HTTP2_OUT_OF_STREAMSERR_HTTP2_PAYLOAD_FORBIDDENERR_HTTP2_PING_CANCELERR_HTTP2_PING_LENGTHERR_HTTP2_PSEUDOHEADER_NOT_ALLOWEDERR_HTTP2_PUSH_DISABLEDERR_HTTP2_SEND_FILEERR_HTTP2_SEND_FILE_NOSEEKERR_HTTP2_SESSION_ERRORERR_HTTP2_SETTINGS_CANCELERR_HTTP2_SOCKET_BOUNDERR_HTTP2_SOCKET_UNBOUNDERR_HTTP2_STATUS_101ERR_HTTP2_STATUS_INVALIDERR_HTTP2_STREAM_CANCELERR_HTTP2_STREAM_ERRORERR_HTTP2_STREAM_SELF_DEPENDENCYERR_HTTP2_TOO_MANY_CUSTOM_SETTINGSERR_HTTP2_TOO_MANY_INVALID_FRAMESERR_HTTP2_TRAILERS_ALREADY_SENTERR_HTTP2_TRAILERS_NOT_READYERR_HTTP2_UNSUPPORTED_PROTOCOLERR_HTTP_BODY_NOT_ALLOWEDERR_HTTP_CONTENT_LENGTH_MISMATCHERR_HTTP_HEADERS_SENTERR_HTTP_INVALID_HEADER_VALUEERR_HTTP_INVALID_STATUS_CODEERR_HTTP_REQUEST_TIMEOUTERR_HTTP_SOCKET_ASSIGNEDERR_HTTP_SOCKET_ENCODINGERR_HTTP_TRAILER_INVALIDERR_ILLEGAL_CONSTRUCTORERR_IMPORT_ATTRIBUTE_MISSINGERR_IMPORT_ATTRIBUTE_TYPE_INCOMPATIBLEERR_IMPORT_ATTRIBUTE_UNSUPPORTEDERR_INCOMPATIBLE_OPTION_PAIRERR_INPUT_TYPE_NOT_ALLOWEDERR_INSPECTOR_ALREADY_ACTIVATEDERR_INSPECTOR_ALREADY_CONNECTEDERR_INSPECTOR_CLOSEDERR_INSPECTOR_COMMANDERR_INSPECTOR_NOT_ACTIVEERR_INSPECTOR_NOT_AVAILABLEERR_INSPECTOR_NOT_CONNECTEDERR_INSPECTOR_NOT_WORKERERR_INTERNAL_ASSERTIONERR_INVALID_ADDRESSERR_INVALID_ADDRESS_FAMILYERR_INVALID_ARG_TYPEERR_INVALID_ARG_VALUEERR_INVALID_ASYNC_IDERR_INVALID_BUFFER_SIZEERR_INVALID_CHARERR_INVALID_CURSOR_POSERR_INVALID_FDERR_INVALID_FD_TYPEERR_INVALID_FILE_URL_HOSTERR_INVALID_FILE_URL_PATHERR_INVALID_HANDLE_TYPEERR_INVALID_HTTP_TOKENERR_INVALID_IP_ADDRESSERR_INVALID_MIME_SYNTAXERR_INVALID_MODULEERR_INVALID_MODULE_SPECIFIERERR_INVALID_OBJECT_DEFINE_PROPERTYERR_INVALID_PACKAGE_CONFIGERR_INVALID_PACKAGE_TARGETERR_INVALID_PROTOCOLERR_INVALID_REPL_EVAL_CONFIGERR_INVALID_REPL_INPUTERR_INVALID_RETURN_PROPERTYERR_INVALID_RETURN_PROPERTY_VALUEERR_INVALID_RETURN_VALUEERR_INVALID_STATEERR_INVALID_SYNC_FORK_INPUTERR_INVALID_THISERR_INVALID_TUPLEERR_INVALID_TYPESCRIPT_SYNTAXERR_INVALID_URIERR_INVALID_URLERR_INVALID_URL_PATTERNERR_INVALID_URL_SCHEMEERR_IPC_CHANNEL_CLOSEDERR_IPC_DISCONNECTEDERR_IPC_ONE_PIPEERR_IPC_SYNC_FORKERR_IP_BLOCKEDERR_LOADER_CHAIN_INCOMPLETEERR_LOAD_SQLITE_EXTENSIONERR_MEMORY_ALLOCATION_FAILEDERR_MESSAGE_TARGET_CONTEXT_UNAVAILABLEERR_METHOD_NOT_IMPLEMENTEDERR_MISSING_ARGSERR_MISSING_OPTIONERR_MISSING_PASSPHRASEERR_MISSING_PLATFORM_FOR_WORKERERR_MODULE_LINK_MISMATCHERR_MODULE_NOT_FOUNDERR_MULTIPLE_CALLBACKERR_NAPI_CONS_FUNCTIONERR_NAPI_INVALID_DATAVIEW_ARGSERR_NAPI_INVALID_TYPEDARRAY_ALIGNMENTERR_NAPI_INVALID_TYPEDARRAY_LENGTHERR_NAPI_TSFN_CALL_JSERR_NAPI_TSFN_GET_UNDEFINEDERR_NON_CONTEXT_AWARE_DISABLEDERR_NOT_BUILDING_SNAPSHOTERR_NOT_IN_SINGLE_EXECUTABLE_APPLICATIONERR_NOT_SUPPORTED_IN_SNAPSHOTERR_NO_CRYPTOERR_NO_ICUERR_NO_TYPESCRIPTERR_OPERATION_FAILEDERR_OPTIONS_BEFORE_BOOTSTRAPPINGERR_OUT_OF_RANGEERR_PACKAGE_IMPORT_NOT_DEFINEDERR_PACKAGE_PATH_NOT_EXPORTEDERR_PARSE_ARGS_INVALID_OPTION_VALUEERR_PARSE_ARGS_UNEXPECTED_POSITIONALERR_PARSE_ARGS_UNKNOWN_OPTIONERR_PERFORMANCE_INVALID_TIMESTAMPERR_PERFORMANCE_MEASURE_INVALID_OPTIONSERR_PROTO_ACCESSERR_PROXY_INVALID_CONFIGERR_PROXY_TUNNELERR_QUIC_APPLICATION_ERRORERR_QUIC_CONNECTION_FAILEDERR_QUIC_ENDPOINT_CLOSEDERR_QUIC_OPEN_STREAM_FAILEDERR_QUIC_TRANSPORT_ERRORERR_QUIC_VERSION_NEGOTIATION_ERRORERR_REQUIRE_ASYNC_MODULEERR_REQUIRE_CYCLE_MODULEERR_REQUIRE_ESMERR_SCRIPT_EXECUTION_INTERRUPTEDERR_SCRIPT_EXECUTION_TIMEOUTERR_SERVER_ALREADY_LISTENERR_SERVER_NOT_RUNNINGERR_SINGLE_EXECUTABLE_APPLICATION_ASSET_NOT_FOUNDERR_SOCKET_ALREADY_BOUNDERR_SOCKET_BAD_BUFFER_SIZEERR_SOCKET_BAD_PORTERR_SOCKET_BAD_TYPEERR_SOCKET_BUFFER_SIZEERR_SOCKET_CLOSEDERR_SOCKET_CLOSED_BEFORE_CONNECTIONERR_SOCKET_CONNECTION_TIMEOUTERR_SOCKET_DGRAM_IS_CONNECTEDERR_SOCKET_DGRAM_NOT_CONNECTEDERR_SOCKET_DGRAM_NOT_RUNNINGERR_SOURCE_MAP_CORRUPTERR_SOURCE_MAP_MISSING_SOURCEERR_SOURCE_PHASE_NOT_DEFINEDERR_SQLITE_ERRORERR_SRI_PARSEERR_STREAM_ALREADY_FINISHEDERR_STREAM_CANNOT_PIPEERR_STREAM_DESTROYEDERR_STREAM_NULL_VALUESERR_STREAM_PREMATURE_CLOSEERR_STREAM_PUSH_AFTER_EOFERR_STREAM_UNABLE_TO_PIPEERR_STREAM_UNSHIFT_AFTER_END_EVENTERR_STREAM_WRAPERR_STREAM_WRITE_AFTER_ENDERR_STRING_TOO_LONGERR_SYNTHETICERR_SYSTEM_ERRORERR_TEST_FAILUREERR_TLS_ALPN_CALLBACK_INVALID_RESULTERR_TLS_ALPN_CALLBACK_WITH_PROTOCOLSERR_TLS_CERT_ALTNAME_FORMATERR_TLS_CERT_ALTNAME_INVALIDERR_TLS_DH_PARAM_SIZEERR_TLS_HANDSHAKE_TIMEOUTERR_TLS_INVALID_CONTEXTERR_TLS_INVALID_PROTOCOL_METHODERR_TLS_INVALID_PROTOCOL_VERSIONERR_TLS_INVALID_STATEERR_TLS_PROTOCOL_VERSION_CONFLICTERR_TLS_PSK_SET_IDENTITY_HINT_FAILEDERR_TLS_RENEGOTIATION_DISABLEDERR_TLS_REQUIRED_SERVER_NAMEERR_TLS_SESSION_ATTACKERR_TLS_SNI_FROM_SERVERERR_TRACE_EVENTS_CATEGORY_REQUIREDERR_TRACE_EVENTS_UNAVAILABLEERR_TRAILING_JUNK_AFTER_STREAM_ENDERR_TRANSFORM_ALREADY_TRANSFORMINGERR_TRANSFORM_WITH_LENGTH_0ERR_TTY_INIT_FAILEDERR_UNAVAILABLE_DURING_EXITERR_UNCAUGHT_EXCEPTION_CAPTURE_ALREADY_SETERR_UNESCAPED_CHARACTERSERR_UNHANDLED_ERRORERR_UNKNOWN_BUILTIN_MODULEERR_UNKNOWN_CREDENTIALERR_UNKNOWN_ENCODINGERR_UNKNOWN_FILE_EXTENSIONERR_UNKNOWN_MODULE_FORMATERR_UNKNOWN_SIGNALERR_UNSUPPORTED_DIR_IMPORTERR_UNSUPPORTED_ESM_URL_SCHEMEERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPINGERR_UNSUPPORTED_RESOLVE_REQUESTERR_UNSUPPORTED_TYPESCRIPT_SYNTAXERR_USE_AFTER_CLOSEERR_VALID_PERFORMANCE_ENTRY_TYPEERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSINGERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING_FLAGERR_VM_MODULE_ALREADY_LINKEDERR_VM_MODULE_CACHED_DATA_REJECTEDERR_VM_MODULE_CANNOT_CREATE_CACHED_DATAERR_VM_MODULE_DIFFERENT_CONTEXTERR_VM_MODULE_LINK_FAILUREERR_VM_MODULE_NOT_MODULEERR_VM_MODULE_STATUSERR_WASI_ALREADY_STARTEDERR_WASI_NOT_STARTEDERR_WEBASSEMBLY_RESPONSEERR_WORKER_INIT_FAILEDERR_WORKER_INVALID_EXEC_ARGVERR_WORKER_MESSAGING_ERROREDERR_WORKER_MESSAGING_FAILEDERR_WORKER_MESSAGING_SAME_THREADERR_WORKER_MESSAGING_TIMEOUTERR_WORKER_NOT_RUNNINGERR_WORKER_OUT_OF_MEMORYERR_WORKER_PATHERR_WORKER_UNSERIALIZABLE_ERRORERR_WORKER_UNSUPPORTED_OPERATIONERR_ZLIB_INITIALIZATION_FAILEDERR_ZSTD_INVALID_PARAMHPE_CHUNK_EXTENSIONS_OVERFLOWHPE_HEADER_OVERFLOWHPE_UNEXPECTED_CONTENT_LENGTHMODULE_NOT_FOUND
- 舊版 Node.js 錯誤碼
ERR_CANNOT_TRANSFER_OBJECTERR_CPU_USAGEERR_CRYPTO_HASH_DIGEST_NO_UTF16ERR_CRYPTO_SCRYPT_INVALID_PARAMETERERR_FS_INVALID_SYMLINK_TYPEERR_HTTP2_FRAME_ERRORERR_HTTP2_HEADERS_OBJECTERR_HTTP2_HEADER_REQUIREDERR_HTTP2_INFO_HEADERS_AFTER_RESPONDERR_HTTP2_STREAM_CLOSEDERR_HTTP_INVALID_CHARERR_IMPORT_ASSERTION_TYPE_FAILEDERR_IMPORT_ASSERTION_TYPE_MISSINGERR_IMPORT_ASSERTION_TYPE_UNSUPPORTEDERR_INDEX_OUT_OF_RANGEERR_INVALID_OPT_VALUEERR_INVALID_OPT_VALUE_ENCODINGERR_INVALID_PERFORMANCE_MARKERR_INVALID_TRANSFER_OBJECTERR_MANIFEST_ASSERT_INTEGRITYERR_MANIFEST_DEPENDENCY_MISSINGERR_MANIFEST_INTEGRITY_MISMATCHERR_MANIFEST_INVALID_RESOURCE_FIELDERR_MANIFEST_INVALID_SPECIFIERERR_MANIFEST_PARSE_POLICYERR_MANIFEST_TDZERR_MANIFEST_UNKNOWN_ONERRORERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LISTERR_MISSING_TRANSFERABLE_IN_TRANSFER_LISTERR_NAPI_CONS_PROTOTYPE_OBJECTERR_NAPI_TSFN_START_IDLE_LOOPERR_NAPI_TSFN_STOP_IDLE_LOOPERR_NO_LONGER_SUPPORTEDERR_OUTOFMEMORYERR_PARSE_HISTORY_DATAERR_SOCKET_CANNOT_SENDERR_STDERR_CLOSEERR_STDOUT_CLOSEERR_STREAM_READ_NOT_IMPLEMENTEDERR_TAP_LEXER_ERRORERR_TAP_PARSER_ERRORERR_TAP_VALIDATION_ERRORERR_TLS_RENEGOTIATION_FAILEDERR_TRANSFERRING_EXTERNALIZED_SHAREDARRAYBUFFERERR_UNKNOWN_STDIN_TYPEERR_UNKNOWN_STREAM_TYPEERR_V8BREAKITERATORERR_VALUE_OUT_OF_RANGEERR_VM_MODULE_LINKING_ERROREDERR_VM_MODULE_NOT_LINKEDERR_WORKER_UNSUPPORTED_EXTENSIONERR_ZLIB_BINDING_CLOSED
- OpenSSL 錯誤碼
- 錯誤
-
索引
- 斷言測試
- 非同步上下文跟蹤
- 非同步鉤子
- 緩衝區
- C++ 外掛
- 使用 Node-API 的 C/C++ 外掛
- C++ 嵌入器 API
- 子程序
- 叢集
- 命令列選項
- 控制檯
- 加密
- 偵錯程式
- 已棄用的 API
- 診斷通道
- DNS
- 域
- 環境變數
- 錯誤
- 事件
- 檔案系統
- 全域性物件
- HTTP
- HTTP/2
- HTTPS
- 檢查器
- 國際化
- 模組:CommonJS 模組
- 模組:ECMAScript 模組
- 模組:
node:moduleAPI - 模組:包
- 模組: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_CHUNK_EXTENSIONS_OVERFLOW#
為分塊擴充套件接收了太多資料。為了防止惡意或配置不當的客戶端,如果接收到的資料超過 16 KiB,則會發出一個帶有此程式碼的 Error。
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,儘管使用者程式碼也可能觸發它。