无法在本地运行supabase边缘函数

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

我有一个简单的边缘函数脚本,可以在 Gemini 模型上运行提示并输出结果。使用调试器后,问题出现在侦听请求的代码处。调试器提到端口上已经有一个进程正在运行,因此出现错误。

我运行 cURL 命令在本地发布请求的终端出现错误

{"code":"BOOT_ERROR","message":"Worker failed to boot (please check logs)"}%

调试器出错

error: Uncaught (in promise) AddrInUse: Address already in use (os error 48)
    const listener = Deno.listen({
                          ^
    at Object.listen (ext:deno_net/01_net.js:534:35)
    at Server.listenAndServe (https://deno.land/[email protected]/http/server.ts:182:27)
    at serve (https://deno.land/[email protected]/http/server.ts:604:20)
    at startServer (file:///Users/shlokjain/Documents/dev/beacon/supabase/functions/essay-prompt/index.ts:9:19) /* point to serve function call */
    at file:///Users/shlokjain/Documents/dev/beacon/supabase/functions/essay-prompt/index.ts:66:1

脚本中的代码

import { serve } from "https://deno.land/[email protected]/http/server.ts";

const portsToTry = [54321, 8080, 8081];

async function startServer() {
    for (const port of portsToTry) {
        try {
            await serve(async (req) => {
                // code

                return new Response(JSON.stringify(data), { headers: { 'Content-Type': 'application/json'} })
            }, { port })
            console.log(`Server listening on port ${port}`);
            break;
        } catch (err) {
            if (err instanceof Deno.errors.AddrInUse) {
                console.error(`Port ${port} is already in use`);
                continue;
            } else {
                throw err;
            }
        }
    }
}

startServer();
console.log("Hello from Functions!");

cURL 命令来请求

curl -i --location --request POST 'http://127.0.0.1:54321/functions/v1/essay-prompt' \
    --header 'Authorization: Bearer API_KEY' \
    --header 'Content-Type: application/json' \
    --data '{"essayPrompt":"Functions"}'
typescript rest port supabase deno
1个回答
0
投票

您为什么要尝试端口并记录错误?您不应该使用

54321
,因为这是您本地 Supabase 设置运行的端口。请查看 Supabase 文档 中的示例边缘函数,了解它们应该如何组成。

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