[解決済み] Uncaught (in promise) TypeError.を修正する方法。Cloudflare worker の 'Uncaught (in promise) TypeError: Cannot read property 'method' of undefined'' を修正するには?
質問
私は、React Google MapsのKMLレイヤーから呼び出される画像をキャッシュし、画像表示のレイテンシーを低減し、Cloudflare Workerを使用してスケールでAWS S3への呼び出しを低減しようとしています。
私はこのリンクから見つけることができるCloudflareのチュートリアルに従いました。 https://workers.cloudflare.com/docs/tutorials/configure-your-cdn/
Cloudflare ワーカープロジェクトはスクリプトにコンパイルされ、コンソールは以下のエラーを表示しています。 Uncaught (in promise) TypeError: 未定義のプロパティ 'method' を読み取ることができません。 Uncaught (in response) TypeError: 未定義のプロパティ 'method' を読み取れませんでした。
Cloudflareで生成されたスクリプトのminifiedファイルを確認しましたが、チュートリアルに忠実に従ったにもかかわらず、何が間違っているのかがわかりません。
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
const BUCKET_NAME = 'nightskybrightness'
const BUCKET_URL = `https://${BUCKET_NAME}.s3.eu-west-3.amazonaws.com`
async function serveAsset(event) {
const url = new URL(event.request.url)
const cache = caches.default
let response = await cache.match(event.request)
if (!response) {
response = await fetch(`${BUCKET_URL}${url.pathname}`)
const headers = { 'cache-control': 'public, max-age=15638400' }
response = new Response(response.body, { ...response, headers })
event.waitUntil(cache.put(event.request, response.clone()))
}
return response
}
async function handleRequest(event) {
if (event.request.method === 'GET') {
let response = await serveAsset(event)
if (response.status > 399) {
response = new Response(response.statusText, { status: response.status })
}
return response
} else {
return new Response('Method not allowed', { status: 405 })
}
}
期待される結果:CloudflareはCDNに画像をキャッシュし、最終ユーザーから呼び出されたときに遅延を減らして提供し、AWS S3への呼び出しも減らすことができます。 network/headersセクションのcf-cache-statusはHITまたはMISSを示すはずです。キャッシュされた画像は、ユーザーのブラウザでGoogle Mapsの上にあるKMLレイヤーに配置されることになります。
実際の結果:Cloudflareワーカースクリプトがエラーを投げ、意図した画像キャッシュが行われない。 network/headers セクションの cf-cache-status は、Response Headers セクションに表示すらされない。
どうすればいいですか?
問題は、この行にあります。
event.respondWith(handleRequest(event.request))
を渡しています。
event.request
をパラメータとして
handleRequest()
. しかし、この行で
async function handleRequest(event) {
handleRequest()
を取るように定義されています。
event
でなく
event.request
. だからこの行で
if (event.request.method === 'GET') {
にアクセスしていることになります。
event.request.request.method
. しかし
event.request.request
は
undefined
にアクセスしようとすると、例外が発生します。
undefined.method
.
を変更することをお勧めします。
event.respondWith
の行に変更します。
event.respondWith(handleRequest(event))
リンク先のサンプルコードではこのようになります。
関連
-
[解決済み】Heroku:ノードアプリで「このアプリにはデフォルトの言語が検出されませんでした」エラーがスローされる
-
[解決済み] Uncaught TypeError: 未定義のプロパティ 'top' を読み込めない
-
[解決済み】webpack: モジュールが見つかりません。Error: 解決できない(相対パスで)
-
[解決済み】ES6マップオブジェクトをソートすることは可能ですか?
-
[解決済み】Uncaught TypeError: 未定義のプロパティ 'msie' を読み取れない - jQuery tools
-
[解決済み】react router v^4.0.0 Uncaught TypeError: 未定義のプロパティ'location'を読み取れない
-
[解決済み] Uncaught TypeError: 未定義のプロパティ 'toLowerCase' を読み取れませんでした。
-
[解決済み] TypeError: 未定義のプロパティ 'then' を読み取ることができません。
-
[解決済み] React - uncaught TypeError: 未定義のプロパティ 'setState' を読み取れない
-
[解決済み】Google MAP API Uncaught TypeError: nullのプロパティ'offsetWidth'を読み取れませんでした。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】パッシブイベントリスナー内部でpreventDefaultができない
-
[解決済み】Javascript:getElementById対getElementsById(両方が別のページで動作する)。
-
[解決済み】フォームコントロールの値アクセサがない
-
[解決済み】Uncaught ReferenceError: angular is not defined - AngularJSが動作しない。
-
[解決済み】Uncaught TypeError: nullのプロパティ'value'を読み取ることができない
-
[解決済み】Uncaught SyntaxError: JSON の位置 0 に予期しないトークン u があります。
-
[解決済み】リソースはドキュメントと解釈されるが、MIMEタイプはapplication/zipで転送される
-
[解決済み】JavaScriptで相対URLへのリダイレクトを行う
-
[解決済み】SyntaxError: 期待された式が、'<'を得た。
-
[解決済み】 \u003C とは何ですか?