在Netlify上部署Nuxt项目集成Cloudflare Turnstile遇函数找不到问题
我正尝试在Netlify上的Nuxt项目中集成Cloudflare Turnstile。本地环境下,通过Nuxt的server/api目录中的validateTurnstile.js验证Token可正常工作,代码如下:
export default defineEventHandler(async (event) => { const body = await readBody(event) return await verifyTurnstileToken(body.token || body['cf-turnstile-response']) })
在signup.vue页面中验证Token的代码为:
async validateToken() { let response; try { response = await $fetch('api/validateTurnstile', { method: 'POST', body: { token: this.token, }, }); } catch (error) { console.error("Token validation error:", error); return false; } return response; },
部署到Netlify时是否必须使用Edge Functions?我按照文档配置,将validateTurnstile.js放入netlify/edge-functions目录后,出现函数找不到的错误,Edge Functions的validateTurnstile.js是否应如下编写?
exports.handler = async (event) => { try { const { token } = JSON.parse(event.body); // Your logic here, for example: const result = await verifyTurnstileToken(token); return { statusCode: 200, body: JSON.stringify(result), }; } catch (error) { return { statusCode: 500, body: JSON.stringify({ error: error.message }), }; } };
补充错误信息
改用Netlify Edge Functions后,我将signup.vue中的请求路径改为await $fetch('/validateTurnstile'...),但访问localhost:8888/validateTurnstile时出现如下错误:
{"errorType":"Error","errorMessage":"Could not find function
'validateTurnstile'","trace":["Error: Could not find function
'validateTurnstile'\n at FunctionChain.getFunction
(https://v2-8-1--edge.netlify.com/bootstrap/function_chain.ts:248:13)\n
at FunctionChain.runFunction
(https://v2-8-1--edge.netlify.com/bootstrap/function_chain.ts:353:23)\n
at FunctionChain.run
(https://v2-8-1--edge.netlify.com/bootstrap/function_chain.ts:323:31)\n
at handleRequest
(https://v2-8-1--edge.netlify.com/bootstrap/handler.ts:148:34)\n at
https://v2-8-1--edge.netlify.com/bootstrap/server.ts:39:7\n at
ext:deno_http/00_serve.ts:364:24\n at
ext:deno_http/00_serve.ts:552:29\n at eventLoopTick
ext:core/01_core.js:168:7"]}
开发者控制台也提示:
signup.vue:279 Token validation error: FetchError: [POST]
"/validateTurnstile": 404 Not Found
at async $fetch22 (ofetch.00501375.mjs:261:15)
at async Proxy.validateToken (signup.vue:272:1)
at async Proxy.handleSubmit (signup.vue:289:1)
项目根目录结构如图:
内容的提问来源于stack exchange,提问作者razor60

