您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
本主題說明您可能會在 Edge Microgateway 中遇到的錯誤和警告。
一般應用程式錯誤
HTTP 500,錯誤處理常式失敗 - 大部分錯誤都會有這個數字,目標傳回的部分錯誤也是如此。特別是 errors-middleware.js 會在整個 microgateway-core 模組中使用。使用時,會透過 Edge Microgateway
logger object: logger.error(err, 'failed in error handler');將 statusCodes 寫入記錄。 如果目標傳回的代碼介於 100 到 300 之間,errors-middleware.js 會將 statusCode 重新編寫為 500,然後傳回給用戶端。HTTP 404 - 您可能會看到這個狀態,並產生堆疊追蹤記錄和以下訊息:
no match found for [API_path_name]。
模組錯誤和警告
您可以根據這項資訊設定快訊,監控及管理 Edge Microgateway 部署作業。
「處理常式」下的錯誤參照中會顯示下列字詞,指出 Edge Microgateway 如何處理各種錯誤。
- assert:通常,如果判斷結果為失敗,Edge Microgateway 就會停止運作。不過,情況不一定如此,因為「asserts」會擲回可擷取的例外狀況。
- 擲回:系統可能停止運作。
- callback:錯誤會傳遞至回呼,系統可能會繼續運作。
| 類型 | 訊息 | Handler | 附註 |
|---|---|---|---|
microgateway 模組 |
|||
| error | 必須提供機構 | assert | assert(options.org,"org is required"); |
| error | env is required | assert | assert(options.env,"env is required") |
| error | 必須提供使用者名稱 | assert | assert(options.username || options.token,"username is required"); |
| error | 必須提供密碼 | assert | assert(options.password || options.token,"password is required") |
| error | 必須提供機構 | assert | assert(options.org,"org is required"); |
| error | env is required | assert | assert(options.env,"env is required") |
| error | 必須提供使用者名稱 | assert | assert(options.username || options.token,"username is required"); |
| error | 必須提供密碼 | assert | assert(options.password || options.token,"password is required") |
| error | 必須提供機構 | assert | assert(options.org,"org is required"); |
| error | env is required | assert | assert(options.env,"env is required") |
| error | 必須提供機構 | assert | assert(options.org,"org is required"); |
| error | env is required | assert | assert(options.env,"env is required") |
| error | 必須提供使用者名稱 | assert | assert(options.username, 'username is required'); |
| error | 必須提供密碼 | assert | assert(options.password, 'password is required'); |
| error | 必須提供機構 | assert | assert(options.org, 'org is required'); |
| error | env is required | assert | assert(options.env, 'env is required'); |
| error | 必須指派目標檔案 | assert | assert(targetFile, 'must have an assigned target file') |
| error | 必須有金鑰 | assert | assert(key, 'must have a key'); |
| error | 必須有密鑰 | assert | assert(secret, 'must have a secret'); |
| error | 必須設定 dir | assert | assert(dir, 'dir must be configured') |
| error | 必須提供回呼 | assert | assert(callback, 'callback must be present') |
| error | 必須提供使用者名稱 | assert | assert(options.username, 'username is required'); |
| error | 必須提供密碼 | assert | assert(options.password, 'password is required'); |
| error | 必須提供機構 | assert | assert(options.org, 'org is required'); |
| error | env is required | assert | assert(options.env, 'env is required'); |
| error | 必須提供 runtimeUrl | assert | assert(options.runtimeUrl, 'runtimeUrl is required'); |
| error | mgmtUrl 為必填欄位 | assert | assert(options.mgmtUrl, 'mgmtUrl is required'); |
| error | 必須提供檔案 | assert | assert(options.file,"file is required") |
| error | 必須有目標 | assert | assert(options.target, 'must have target'); |
| error | plugins not configured | assert | assert(config.edgemicro.plugins, 'plugins not configured'); |
| error | plugin dir does not exist: + pluginDir | assert | assert(fs.existsSync(pluginDir), 'plugin dir does not exist: ' + pluginDir); |
| error | plugin dir is not a directory: + pluginDir | assert | assert(stat.isDirectory(), 'plugin dir is not a directory: ' + pluginDir); |
| error | error reading plugin dir: + pluginDir | assert | assert(dirs, 'error reading plugin dir: ' + pluginDir); |
| error | 必須有權杖 | assert | assert(token, 'must have a token'); |
| error | configpath 不得留空 | assert | assert(config, 'configpath can't be empty'); |
| error | 必須有 EDGEMICRO_KEY | assert | assert(key, 'must have EDGEMICRO_KEY'); |
| error | 必須有 EDGEMICRO_SECRET | assert | assert(secret, 'must have EDGEMICRO_SECRET'); |
| error | 設定不存在 | throws | 與 YAML 檔案相關 |
| error | edgemicro 似乎已在執行。 | console.error | attempting to overwrite a .sock file |
| error | 無法檢查設定變更。系統將於 | console.error | 邊緣通訊發生問題 |
| error | 如果伺服器未執行,可能是因為先前啟動時關機不當。 | console.error | |
| error | 缺少 %s,請執行 | console.error | Missing (.*), Please run |
| error | 無法重新載入 edgemicro | console.error | 指令層級 |
| error | 無法停止 edgemicro | console.error | 指令層級 |
| error | 'Try removing ' + ipcPath + ' and start again' | console.error | |
| error | 'cache configuration ' + cache + ' does not exist. exiting.' | console.error | |
| error | 無法寫入設定檔: | console.error | 設定會失敗 |
| error | 設定檔未下載: | console.error | 設定會失敗 |
| error | edge micro 無法啟動 | console.error | 不應執行 |
| error | edgemicro 未執行。 | console.error | 檢查程序,不應列出 |
| error | env is required | console.error | 執行時所需的環境變數 |
| error | error - editing apiproxy Callout.xml | console.error | 檔案存取權 |
| error | error - editing apiproxy default.xml | console.error | 檔案存取權 |
| error | error checking for cert. 安裝新憑證。 | console.error | 無法使用公開金鑰 |
| error | 無法擷取機構的區域 | console.error | key-gen.js、cert-lib.js 和 private.js |
| error | 上傳憑證時發生錯誤 | console.error | 無法將公開金鑰與 Edge 同步 |
| error | 失敗 | console.error | key-gen.js |
| error | failed to init configpath file %s | console.error | 無法載入設定 |
| error | 區域 API 回應無效 | console.error | key-gen.js、cert-lib.js 和 private.js |
| error | 必須提供索引鍵 | console.error | 參數 |
| error | 必須提供機構 | console.error | 參數 |
| error | port is not available。 | console.error | 參數 |
| error | 必須提供密鑰 | console.error | 參數 |
| error | 不支援的網址通訊協定: | console.error | 設定資訊指出 Edge Microgateway 範圍外的網際網路通訊協定 |
| error | verifying analytics negative case: FAIL | console.error | 可能導致當機/失敗 |
| error | verifying analytics with payload: FAIL | console.error | 可能導致當機/失敗 |
| error | verifying bootstrap url availability:FAIL | console.error | 可能導致當機/失敗 |
| error | verifying jwt_public_key availability: FAIL | console.error | 可能導致當機/失敗 |
| error | verifying products availability: FAIL | console.error | 可能導致當機/失敗 |
| error | verifying quota with configured products: FAIL | console.error | 可能導致當機/失敗 |
| warn | failed to retrieve config from gateway. continuing, will try cached copy.. | console.error | |
| warn | 貴機構中已有 KVM | console.log | |
| warn | 已部署 | console.log | |
| warn | 找不到依序執行的外掛程式: | console.warn | |
| warn | pluginDir %s 不存在 | console.log | pluginDir (.*) does not exist |
microgateway-core 模組 |
|||
| error | config not initialized | assert | assert(config, 'config not initialized') |
| error | 必須有設定檔 | assert | assert(config, ' must have a config') |
| error | 必須有設定 | assert | assert(config, 'must have config') |
| error | 設定檔必須有 uid | assert | assert(config.uid, 'config must have uid'); |
| error | 必須在設定中包含 config.edgemicro.logging | assert | assert(logConfig, 'must have config.edgemicro.logging in config'); |
| error | 必須有要求方法 | assert | assert(httpLibrary.request, 'must have request method'); |
| error | 必須將外掛程式載入記憶體 | assert | assert(options.plugin, "must have plugin loaded in memory"); |
| error | init 必須是函式 | assert | assert(_.isFunction(options.plugin.init), 'init must be a function'); |
| error | 必須有外掛程式名稱 | assert | assert(options.pluginName, "must have plugin name"); |
| error | ignoring invalid plugin handlers + name<0x0x0A> | assert | assert(_.isObject(middleware), 'ignoring invalid plugin handlers ' + name); |
| error | 選項必須包含設定 | assert | assert(config, 'options must contain config') |
| error | 外掛程式必須有名稱 | assert | assert(name,"plugin must have a name") |
| error | 名稱必須是字串 | assert | assert(_.isString(name),"name must be a string"); |
| error | 外掛程式必須是函式 | assert | assert(_.isFunction(plugin),"plugin must be a function(config,logger,stats){return {onresponse:function(req,res,data,next){}}}"); |
| error | 必須有金鑰 | assert | assert(key, 'must have a key'); |
| error | 必須有密鑰 | assert | assert(secret, 'must have a secret'); |
| error | 必須有來源設定目錄 | assert | assert(source, 'must have a source config directory'); |
| error | error loading plugin | console.error | 外掛程式未載入 |
| error | failed in error handler | 回呼 | HTTP server.on() 函式 |
| error | 標頭長度超過允許的大小 | HTTP 錯誤 | 外掛程式無法執行 |
| error | response finished before work can be done | logger.error | 目標外掛程式未執行 |
| error | 處理常式擲回例外狀況 | 回呼 | 從外掛程式 (catch) 擷取錯誤 |
| error | error starting edge micro | 回呼 | Edge Microgateway 無法啟動 |
| error | 外掛程式必須是函式 | throws | |
| warn | console.error | 警告 | 寫入記錄 |
| warn | targetRequest 錯誤 | 叫用目標錯誤處理常式 | 與目標連線時發生 HTTP 用戶端錯誤 |
| warn | targetResponse 錯誤 | 叫用目標錯誤處理常式 | 與目標連線時發生 HTTP 目標伺服器錯誤 (如用戶端所示) |
microgateway-config 模組 |
|||
| error | allow_message | assert | assert(+config.quota.allow > 0, allow_message); |
| error | 設定不存在 | throws | 設定 YAML 檔案 |
| error | config is empty | throws | 設定 YAML 檔案 |
| error | config is not a file | throws | 設定 YAML 檔案 |
| error | config is not defined | assert | assert(config, 'config is not defined'); |
| error | config.analytics.batchSize 無效 | assert | assert(+config.analytics.batchSize > 0, 'config.analytics.batchSize is invalid'); |
| error | config.analytics.batchSize 不是數字 | assert | assert(typeof config.analytics.batchSize === 'number', 'config.analytics.batchSize is not a number'); |
| error | config.analytics.bufferSize 無效 | assert | assert(+config.analytics.bufferSize > 0, 'config.analytics.bufferSize is invalid'); |
| error | config.analytics.bufferSize 不是數字 | assert | assert(typeof config.analytics.bufferSize === 'number', 'config.analytics.bufferSize is not a number'); |
| error | config.analytics.flushInterval 無效 | assert | assert(+config.analytics.flushInterval > 0, 'config.analytics.flushInterval is invalid'); |
| error | config.analytics.flushInterval 不是數字 | assert | assert(typeof config.analytics.flushInterval === 'number', 'config.analytics.flushInterval is not a number'); |
| error | config.analytics.proxy 不是「dummy」 | assert | assert(config.analytics.proxy === 'dummy', 'config.analytics.proxy is not "dummy"'); |
| error | config.analytics.proxy 未定義 | assert | assert(config.analytics.proxy, 'config.analytics.proxy is not defined'); |
| error | config.analytics.proxy_revision 不是數字 | assert | assert(typeof config.analytics.proxy_revision === 'number', 'config.analytics.proxy_revision is not a number'); |
| error | config.analytics.proxy_revision 未定義 | assert | assert(config.analytics.proxy_revision, 'config.analytics.proxy_revision is not defined'); |
| error | config.analytics.source 不是「microgateway」 | assert | assert(config.analytics.source === 'microgateway', 'config.analytics.source is not "microgateway"'); |
| error | config.analytics.source 未定義 | assert | assert(config.analytics.source, 'config.analytics.source is not defined'); |
| error | config.analytics.uri 不是字串 | assert | assert(typeof config.analytics.uri === 'string', 'config.analytics.uri is not a string'); |
| error | config.analytics.uri 未定義 | assert | assert(config.analytics.uri, 'config.analytics.uri is not defined'); |
| error | 未定義 config.apikeys.public_key | assert | assert(typeof config.apikeys.public_key === 'string', 'config.apikeys.public_key is not defined'); |
| error | config.edge_config 未定義 | assert | assert(config.edge_config, 'config.edge_config is not defined'); |
| error | config.edge_config.bootstrap 未定義 | assert | assert(config.edge_config.bootstrap, 'config.edge_config.bootstrap is not defined'); |
| error | config.edge_config.jwt_public_key 未定義 | assert | assert(config.edge_config.jwt_public_key, 'config.edge_config.jwt_public_key is not defined'); |
| error | 如果定義了 config.edge_config.proxy_tunnel,就必須定義 config.edge_config.proxy | assert | assert(typeof config.edge_config.proxy !== 'undefined', 'config.edge_config.proxy must be defined if config.edge_config.proxy_tunnel is defined'); |
| error | config.edge_config.proxy_tunnel 不是布林值 | assert | assert(typeof config.edge_config.proxy_tunnel === 'boolean', 'config.edge_config.proxy_tunnel is not a boolean'); |
| error | config.edge_config.refresh_interval 不是數字 | assert | assert(typeof config.edge_config.refresh_interval === 'number', 'config.edge_config.refresh_interval is not a number'); |
| error | config.edge_config.refresh_interval 太小 (至少 1 小時) | assert | assert(config.edge_config.refresh_interval >= 3600000, 'config.edge_config.refresh_interval is too small (min 1h)'); |
| error | config.edge_config.retry_interval 不是數字 | assert | assert(typeof config.edge_config.retry_interval === 'number', 'config.edge_config.retry_interval is not a number'); |
| error | config.edge_config.retry_interval 太小 (至少 5 秒) | assert | assert(config.edge_config.retry_interval >= 5000, 'config.edge_config.retry_interval is too small (min 5s)'); |
| error | config.edgemicro 未定義 | assert | assert(config.edgemicro, 'config.edgemicro is not defined'); |
| error | config.edgemicro.logging 未定義 | assert | assert(config.edgemicro.logging, 'config.edgemicro.logging is not defined'); |
| error | config.edgemicro.logging.dir 未定義 | assert | if (!config.edgemicro.logging.to_console) assert(config.edgemicro.logging.dir, 'config.edgemicro.logging.dir is not defined'); |
| error | config.edgemicro.logging.level is not defined | assert | assert(config.edgemicro.logging.level, 'config.edgemicro.logging.level is not defined'); |
| error | config.edgemicro.max_connections 不是數字 | assert | assert(typeof config.edgemicro.max_connections === 'number', 'config.edgemicro.max_connections is not a number'); |
| error | config.edgemicro.max_connections 未定義 | assert | assert(config.edgemicro.max_connections, 'config.edgemicro.max_connections is not defined'); |
| error | config.edgemicro.plugins.sequence 不是陣列 | assert | assert(Array.isArray(config.edgemicro.plugins.sequence), 'config.edgemicro.plugins.sequence is not an array'); |
| error | config.edgemicro.port is not defined | assert | assert(config.edgemicro.port, 'config.edgemicro.port is not defined'); |
| error | config.oauth.allowInvalidAuthorization 未定義 | assert | assert(typeof config.oauth.allowInvalidAuthorization === 'boolean', 'config.oauth.allowInvalidAuthorization is not defined'); |
| error | config.oauth.allowNoAuthorization is not defined | assert | assert(typeof config.oauth.allowNoAuthorization === 'boolean', 'config.oauth.allowNoAuthorization is not defined'); |
| error | config.oauth.public_key 未定義 | assert | assert(typeof config.oauth.public_key === 'string', 'config.oauth.public_key is not defined'); |
| error | config.oauthv2.public_key 未定義 | assert | assert(typeof config.oauthv2.public_key === 'string', 'config.oauthv2.public_key is not defined'); |
| error | config.proxies is not defined | assert | assert(config.proxies, 'config.proxies is not defined'); |
| error | config.proxy[ + index + ].base_path 未定義 | assert | assert(proxy.base_path, 'config.proxy[' + index + '].base_path is not defined'); |
| error | config.proxy[ + index + ].max_connections 不是數字 | assert | assert(typeof proxy.max_connections === 'number', 'config.proxy[' + index + '].max_connections is not a number'); |
| error | config.proxy[ + index + ].max_connections 未定義 | assert | assert(proxy.max_connections, 'config.proxy[' + index + '].max_connections is not defined'); |
| error | config.proxy[ + index + ].name is not defined | assert | assert(proxy.name, 'config.proxy[' + index + '].name is not defined'); |
| error | config.proxy[ + index + ].proxy_name 未定義 | assert | assert(proxy.target_name, 'config.proxy[' + index + '].proxy_name is not defined'); |
| error | config.proxy[ + index + ].revision is not defined | assert | assert(proxy.revision, 'config.proxy[' + index + '].revision is not defined'); |
| error | config.proxy[ + index + ].url is not defined | assert | assert(proxy.url, 'config.proxy[' + index + '].url is not defined'); |
| error | config.quota.allow 不是數字 | assert | assert(typeof config.quota.allow === 'number', 'config.quota.allow is not a number'); |
| error | config.quota.allow 未定義 | assert | assert(config.quota.allow, 'config.quota.allow is not defined'); |
| error | config.quota.interval 不是數字 | assert | assert(typeof config.quota.interval === 'number', 'config.quota.interval is not a number'); |
| error | config.quota.interval 未定義 | assert | assert(config.quota.interval, 'config.quota.interval is not defined'); |
| error | config.spikearrest 未定義 | assert | assert(config.spikearrest, 'config.spikearrest is not defined'); |
| error | config.spikearrest.allow 無效 | assert | assert(+config.spikearrest.allow > 0, 'config.spikearrest.allow is invalid'); |
| error | config.spikearrest.allow 不是數字 | assert | assert(typeof config.spikearrest.allow === 'number', 'config.spikearrest.allow is not a number'); |
| error | config.spikearrest.allow 未定義 | assert | assert(config.spikearrest.allow, 'config.spikearrest.allow is not defined'); |
| error | config.spikearrest.bufferSize 無效 | assert | assert(+config.spikearrest.bufferSize > 0, 'config.spikearrest.bufferSize is invalid'); |
| error | config.spikearrest.bufferSize 不是數字 | assert | assert(typeof config.spikearrest.bufferSize === 'number', 'config.spikearrest.bufferSize is not a number'); |
| error | config.spikearrest.timeUnit 未定義 | assert | assert(config.spikearrest.timeUnit, 'config.spikearrest.timeUnit is not defined'); |
| error | 重大錯誤:剖析下載的產品清單時發生錯誤 | 回呼 | |
| error | 重大錯誤:剖析下載的 Proxy 清單時發生錯誤 | 回呼 | |
| error | 偵測到產品設定錯誤 | console.error | Followed by console.warn('using old cached configuration'); |
| error | error reading config from | throws | 設定 YAML 檔案 |
| error | error saving config to | 回呼 | 設定 YAML 檔案 |
| error | fatal: cached config not available, unable to continue | 回呼 | |
| error | interval_message | assert | assert(+config.quota.interval > 0, interval_message); |
| error | invalid protocol for config.edge_config.proxy (expected http: or https:: + proxy_url.protocol) | assert | assert(proxy_url.protocol === 'http:' || proxy_url.protocol === 'https:', 'invalid protocol for config.edge_config.proxy (expected http: or https:): ' + proxy_url.protocol); |
| error | invalid proxy host for config.edge_config.proxy | assert | assert(proxy_url.hostname, 'invalid proxy host for config.edge_config.proxy: ' + proxy_url.hostname); |
| error | Edge Micro 似乎尚未設定,請參閱管理員指南 | 回呼 | 結果:無法載入設定 |
| error | 缺少金鑰 | assert | assert(keys.key, 'key is missing'); |
| error | 必須有 configDir | assert | assert(configDir, 'must have configDir') |
| error | 必須提供選項 | assert | assert(options, 'must have options'); |
| error | 必須有來源 | assert | assert(source, 'must have source') |
| error | 必須有可載入的來源 | assert | assert(options.source, 'must have source to load from') |
| error | 必須有 targetFile | assert | assert(fileName, 'must have targetFile') |
| error | options cannot be null | assert | assert(options, 'options cannot be null'); |
| error | options.keys 不得為空值 | assert | assert(options.keys, 'options.keys cannot be null'); |
| error | port_message | assert | assert(+config.edgemicro.port < 65536, port_message); |
| error | 產品應為陣列 | assert | assert(Array.isArray(products), 'products should be an array'); |
| error | 'proxies for product ' + product + ' should be an array' | assert | assert(Array.isArray(product.proxies), 'proxies for product ' + product + ' should be an array'); |
| error | 缺少密鑰 | assert | assert(keys.secret, 'secret is missing'); |
| error | 未設定目標 | assert | assert(target, 'target is not set'); |
| warn | error downloading config, please check bootstrap configuration | console.warn | |
| warn | failed to download jwt_public_key | console.warn | |
| warn | jwk 鍵未啟用 | console.warn | |
| warn | message, 'download from', url, 'returned' | console.warn | Search for: (.*)\sdownload from\s(.*)\sreturned |
| warn | no edge micro products found in response | console.warn | |
| warn | no edge micro proxies found in org | console.warn | |
| warn | no edge micro proxies found in response | console.warn | |
| warn | 機構中找不到任何產品 | console.warn | |
| warn | no products found in response | console.warn | |
| warn | using old cached configuration | console.warn | |
microgateway-plugins 模組 |
|||
| error | 設定不存在 | throws | 與 YAML 檔案相關 |
| error | apikey | HTTP 回應 | apiky 外掛程式發生錯誤 |
| error | bauth | HTTP 回應 | bauth 外掛程式發生失敗 |
| error | extauth | HTTP 回應 | extauth 外掛程式發生故障 |
| error | OAuth | HTTP 回應 | OAuth 外掛程式發生錯誤 |
| warn | 處理 Apigee 數據分析時發生錯誤。允許繼續處理要求 | logger.error | |
| warn | ignoring err | console.warn | apikeys、oauth 和 oauthv2 外掛程式 |
| warn | error parsing jwt: | console.warn | |
| warn | oath 回應物件缺少 setHeader | console.warn | oauth 參數錯誤表示系統不會回報部分錯誤。 |
| warn | 執行階段未提供 oath 回應物件 | console.warn | oauth 參數錯誤 |
| warn | 執行階段未提供 oath 統計資料物件 | console.warn | oauth 參數錯誤 |
apigeetool-node 模組 |
|||
| 錯誤 | Delete Cache failed with status code %d', res.statusCode | callback | 在 deletecache.js 中擲回。Apigee Edge 的狀態碼。 將堆疊追蹤錯誤傳遞至回呼,並附上以下訊息:done(new Error(errMsg)); |
| 錯誤 | Delete Product failed with status code %d', res.statusCode | callback | 在 deleteproduct.js 中擲回。Apigee Edge 的狀態碼。 將堆疊追蹤錯誤傳遞至回呼,並附上以下訊息:done(new Error(errMsg)); |
| 錯誤 | 必須指定機構、API 和修訂版本! | callback | 在 fetchproxy.js 中擲回。設定發生錯誤。 |
| 錯誤 | 擷取 Proxy 時收到錯誤 %d: %j | callback | 在 fetchproxy.js 中擲回。狀態碼不是 200。 |
| 錯誤 | 建立應用程式失敗,狀態碼為 %d | callback | Thrown in createapp.js. 將所有錯誤傳回回呼,做為堆疊追蹤錯誤。 不會產生任何主控台列印內容或記錄項目。 |
| 錯誤 | 指令 + ' 失敗,狀態碼為 %d | callback | 在 command-utils.js 中擲回。無論是何種指令,只要剖析並傳遞至這個模組,如果程式碼不是 200 或 201,就會產生錯誤訊息。格式化這則訊息,但不會列印。將堆疊追蹤錯誤連同訊息傳回回呼。 |
| 錯誤 | 擷取共用流程時發生錯誤 %d:%s | callback | Thrown in fetchsharedflow.js. 任何非 200 的 HTTP 狀態。如果成功,但無法寫入檔案,系統會將下列內容寫入控制台: Failed to write file Error text: [stack_trace_error] |
| 錯誤 | Create KeySecret failed with status code %d', res.statusCode | callback | 在 createappkey.js 中擲回。來自 Apigee Edge 的 HTTP 狀態碼不是 200 或 201。 |
| 錯誤 | Create Cache failed with status code %d', res.statusCode | callback | 在 createcache.js 中擲回。適用於 Apigee Edge 傳回的 HTTP 狀態碼 (非 200 或 201)。 |
| 錯誤 | Create Product failed with status code %d', res.statusCode | callback | 在 createproduct.js 中擲回。Apigee Edge 傳回的 HTTP 狀態碼不是 201。 如果 HTTP 狀態為 201,但回應包含錯誤 JSON,系統會將錯誤 JSON 轉送至回呼。 |
| 錯誤 | Delete App failed with status code %d', res.statusCode | callback | 在 deleteapp.js 中擲回。適用於 Apigee Edge 傳回的 HTTP 狀態碼 (非 200)。 如果 HTTP 狀態為 200,但回應包含錯誤 JSON,系統會將錯誤 JSON 轉送至回呼。 |
| 錯誤 | Create Developer failed with status code %d', res.statusCode | callback | 在 createdeveloper.js 中擲回。Apigee Edge 傳回的 HTTP 狀態碼不是 201。 如果 HTTP 狀態為 201,但回應包含錯誤 JSON,系統會將錯誤 JSON 轉送至回呼。 |
| 錯誤 | Delete Developer failed with status code %d', res.statusCode | callback | 在 deletedeveloper.js 中擲回。適用於 Apigee Edge 傳回的 HTTP 狀態碼 (非 200)。 如果 HTTP 狀態為 200,但回應包含錯誤 JSON,系統會將錯誤 JSON 轉送至回呼。 |
外掛程式錯誤
accesscontrol plug-in
This section describes the error codes and messages that are returned by the
accesscontrol plug-in with descriptions of possible causes.
| Error | Message | HTTP status | Possible Causes |
|---|---|---|---|
| Not printed | Forbidden | 403 | Access control rule |
accumulate-request plug-in
This section describes the error codes and messages that are returned by the
accumulate-request plug-in with descriptions of possible causes.
No errors generated.
accumulate-resopnse plug-in
This section describes the error codes and messages that are returned by the
accumulate-response plug-in with descriptions of possible causes.
No errors generated.
analytics plug-in
This section describes the error codes and messages that are returned by the
analytics plug-in with descriptions of possible causes.
Errors encountered processing Apigee analytics are written to the Edge Microgateway log. Edge Microgateway processing continues.
apikeys plug-in
This section describes the error codes and messages that are returned by the
apikeys plug-in with descriptions of possible causes.
| Error | Message | HTTP status | Possible Causes |
|---|---|---|---|
| invalid_request | Invalid Request | 400 | allowNoAuthorization == false
No Authorization header in the HTTP request allowOAuthOnly == true |
| invalid_request | API Key Verification URL not configured | 400 | Verification API service not in header. |
| access_denied | Copy service message | 403 | In response to the auth service timeout |
| missing_authorization | Missing API Key header | 401 | allowAPIKeyOnly == true
Unless allowInvalidAuthorization |
| invalid_authorization | Invalid Authorization header | 401 | allowOAuthOnly == true
Authorization-header not in HTTP |
| gateway_timeout | Copy service message | 504 | In response to the auth timeout |
| default | 500 | All other not categorized |
bauth plug-in
This section describes the error codes and messages that are returned by the
bauth plug-in with descriptions of possible causes.
| Error | Message | HTTP status | Possible Causes |
|---|---|---|---|
| missing_authorization | Missing API Key header | 401 | allowAPIKeyOnly == true
Unless allowInvalidAuthorization |
| invalid_authorization | Invalid Authorization header | 401 | allowOAuthOnly == true
Authorization-header not in HTTP |
| gateway_timeout | Copy service message | 504 | In response to the auth timeout |
| default | 500 | All other not categorized |
cloud-foundry-route-service plug-in
This section describes the error codes and messages that are returned by the
cloud-foundry-route-service plug-in with descriptions of possible causes.
No errors generated.
cors plug-in
This section describes the error codes and messages that are returned by the
cors plug-in with descriptions of possible causes.
No errors generated.
eurekaclient plug-in
This section describes the error codes and messages that are returned by the
eurekaclient plug-in with descriptions of possible causes.
The eurekaclient plug-in throws a few console errors only, including a stack trace error on failed start and a warning about the target endpoint from Eureka not found.
extauth plug-in
This section describes the error codes and messages that are returned by the
extauth plug-in with descriptions of possible causes.
| Error | Message | HTTP status | Possible Causes |
|---|---|---|---|
| invalid_request | Invalid Request | 400 | allowNoAuthorization == false
No Authorization header in the HTTP request allowOAuthOnly == true |
| invalid_request | API Key Verification URL not configured | 400 | Verification API service not in header. |
| access_denied | Copy service message | 403 | In response to the auth service timeout |
| missing_authorization | Missing API Key header | 401 | allowAPIKeyOnly == true
Unless allowInvalidAuthorization |
| invalid_authorization | Invalid Authorization header | 401 | allowOAuthOnly == true
Authorization-header not in HTTP |
| gateway_timeout | Copy service message | 504 | In response to the auth timeout |
| default | 500 | All other not categorized |
header-uppercase plug-in
This section describes the error codes and messages that are returned by the
header-uppercase plug-in with descriptions of possible causes.
No errors generated.
healthcheck plug-in
This section describes the error codes and messages that are returned by the
healthcheck plug-in with descriptions of possible causes.
| Error | Message | HTTP status | Possible Causes |
|---|---|---|---|
| 503 | Too busy. No messages in HTTP or console | ||
| default | Application is not running on specified application port | 500 | All other not categorized |
invalidHeader plug-in
This section describes the error codes and messages that are returned by the
invalidHeader plug-in with descriptions of possible causes.
No errors generated.
json2xml plug-in
This section describes the error codes and messages that are returned by the
json2xml plug-in with descriptions of possible causes.
| Error | Message | HTTP status | Possible Causes |
|---|---|---|---|
| default | 500 | All other not categorized |
monitor plug-in
This section describes the error codes and messages that are returned by the
monitor plug-in with descriptions of possible causes.
No errors generated.
oauth plug-in (v1)
This section describes the error codes and messages that are returned by the
oauth plug-in (v1) with descriptions of possible causes.
| Error | Message | HTTP status | Possible Causes |
|---|---|---|---|
| invalid_request | Invalid Authorization Header | 400 |
|
| invalid_request | API Key Verification URL not configured | 400 | Verification API service not in header. |
| Access_denied | Copy service message | 403 | In response to the auth service timeout |
| invalid_token | Missing API Key header | 401 | allowAPIKeyOnly == true
Unless allowInvalidAuthorization is set |
| invalid_token | token could not be parsed | 401 | allowAPIKeyOnly == true
Bad token delivered |
| missing_authorization | Missing Authorization header | 401 | allowNoAuthorization == false
Authorization-header in HTTP allowOAuthOnly == true |
| invalid_authorization | Invalid Authorization header | 401 | allowOAuthOnly == true
Authorization-header not in HTTP |
| gateway_timeout | Copy service message | 504 | In response to the auth timeout |
| default | 500 | All other uncategorized responses |
oauthv2 plug-in
This section describes the error codes and messages that are returned by the
oauthv2 plug-in with descriptions of possible causes.
| Error | Message | HTTP status | Possible Causes |
|---|---|---|---|
| invalid_request | Invalid Authorization Header | 400 |
|
| invalid_request | API Key Verification URL not configured | 400 | Verification API service not in header |
| access_denied | Copy service message | 403 | In response to the auth service timeout |
| invalid_token | Missing API Key header | 401 | allowAPIKeyOnly == true
Unless allowInvalidAuthorization is set |
| invalid_token | token could not be parsed | 401 | allowAPIKeyOnly == true
Bad token delivered |
| missing_authorization | Missing Authorization header | 401 | allowNoAuthorization == false
Authorization-header in HTTP allowOAuthOnly == true |
| invalid_authorization | Invalid Authorization header | 401 | allowOAuthOnly == true
Authorization-header not in HTTP |
| gateway_timeout | Copy service message | 504 | In response to the auth timeout |
| default | 500 | All other uncategorized responses |
quota plug-in
This section describes the error codes and messages that are returned by the
quota plug-in with descriptions of possible causes.
Defers to volos quota/apigee.
| Error | Message | HTTP status | Possible Causes |
|---|---|---|---|
| invalid_authorization | Invalid Authorization header | 401 | allowOAuthOnly == true
Authorization-header not in HTTP |
| gateway_timeout | Not authorized to call the remote proxy. Check the "key" parameter. | 404 | In response to the auth timeout |
| default | 500 | All other not categorized | |
| throw | uri parameter must be specified | apigeequota.js | |
| throw | key parameter must be specified | apigeequota.js | |
| callback | Apigee Remote Proxy not found at: ' + self.uri + '. Check your configuration | apigeequota.js | |
| callback | HTTP error getting proxy version: %d. Check the "uri" parameter. | apigeequota.js | |
| callback | Quotas with a fixed starting time are not supported | apigeequota.js | |
| callback | Error updating remote quota: %d %s', resp.statusCode, body | apigeequota.js |
If there is an error on an entry in the product list, the product list will stop being processed.
quota-memory plug-in
This section describes the error codes and messages that are returned by the
quota-memory plug-in with descriptions of possible causes.
Defers to volos quota/apigee.
| Error | Message | HTTP status | Possible Causes |
|---|---|---|---|
| invalid_authorization | Invalid Authorization header | 401 | allowOAuthOnly == true
Authorization-header not in HTTP |
| gateway_timeout | Not authorized to call the remote proxy. Check the "key" parameter. | 404 | In response to the auth timeout |
| default | 500 | All other not categorized | |
| throw | start time not allowed for month time units | quota.js. volos error on time format. | |
| throw | Invalid start time %s | quota.js. volos error on time format. | |
| throw | Invalid timeUnit %s | quota.js. volos error on time format. |
If there is an error on an entry in the product list, the product list will stop being processed.
spikearrest plug-in
This section describes the error codes and messages that are returned by the
spikearrest plug-in with descriptions of possible causes.
Defers to volos spikearrest/memory.
| Error | Message | HTTP status | Possible Causes |
|---|---|---|---|
| SpikeArrest engaged | 503 | Traffic spike. This is expected behavior. | |
| throw | Invalid timeUnit %s | spikearrest.js | |
| callback | key must be a string | spikearrest.js | |
| throw | %s must be a number', name | spikearrest.js |
transform-uppercase plug-in
This section describes the error codes and messages that are returned by the
transform-uppercase plug-in with descriptions of possible causes.
No errors generated.