在开发服务器上找不到 Netlify 函数

问题描述 投票:0回答:2

我关注了几个与我遇到的同一问题相关的博客和问题。这就像这个问题。但是,我仍然遇到问题。

所以,我正在运行

netlify dev
并尝试访问我的 netlify 函数。我在
/netlify/functions/ping
中有一个函数。当我访问 netlify 函数的随机端口(例如 localhost:55832...)时,该函数按预期工作。

但是,使用

localhost:8888/.netlify/functions/ping
会给我一个 404 错误。

这是我的 /netlify/functions/ping 文件:

import { Handler } from '@netlify/functions';

const handler: Handler = async (event, context) => {

  return {
    statusCode: 200,
    body: JSON.stringify({ data: "pong" }),
  };
};

export { handler };

这是我尝试在页面上调用我的函数的地方

export default function HomePage() {

  useEffect(() => {
    async function pingpong() {
      const res = await fetch(`/.netlify/functions/ping`);
      console.log(res);
    }

    pingpong();
  }, []);

  return (
...

我还尝试使用以下内容更改我的 netlify.toml

[[redirects]]
from = "/api/*"
to = "/.netlify/functions/:splat"
status = 200
force = true
netlify netlify-function
2个回答
0
投票

package.json 中使用的启动脚本是什么?

请记住,要启用 Netlify 功能,您必须使用 netlify-cli,即

ntl
命令在本地开发服务器上运行。

没有更具体的配置,只需遵循文档,并使用那个简单的

netlify/functions/hello.js
示例即可。

然后使用

ntl dev
运行,您的功能将在
/.netlify/functions/hello
上可用。容易。


0
投票

对于任何有类似问题的人,请应用下面列出的所有内容:

  1. 在 [yourFunction].js 中使用 commonjs 语法 - 将

    export const handler =
    更改为
    exports.handler =
    并使用
    require
    而不是
    import

  2. 将您的函数放在根文件夹的“functions”目录中,而不是“netlify/functions”,但保持获取的网址相同。

  3. 将 netlify.toml 文件添加到根目录并将其放入其中:

    [build] command = 'npm run build' functions= 'functions' publish = 'dist'

  4. 不要像帖子中所示导入处理程序。实际上,您不需要“@netlify/functions”即可工作。如果您想尝试本地是否一切正常,请全局安装 netlify 并运行命令“netlify login”(以验证您的 Netlify 帐户),然后运行“netlify dev”。

  5. 这是我的示例函数:

    导入“dotenv/config”; 从“stripe”导入Stripe; const stripe = Stripe(process.env.STRIPE_SECRET_KEY);

    exports.handler = 异步(事件)=> { 尝试 { const { 金额 } = JSON.parse(event.body);

    const paymentIntent = await stripe.paymentIntents.create({
      amount,
      currency: "usd",
      payment_method_types: ["card"],
    });
    
    return {
      statusCode: 200,
      body: JSON.stringify({ paymentIntent }),
    };
    

    } 捕获(错误){ console.log({ 错误 });

    return {
      statusCode: 400,
      body: JSON.stringify({ error }),
    };
    

    } };

只有这个解决方案解决了我的问题,希望它也能解决你的问题:)

© www.soinside.com 2019 - 2024. All rights reserved.