You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 16:15:02