为什么在Deno控制台里我的构建仍然失败,即使Deno Dash一切都正常?
我的一个简单的Deno脚本在dash.deno.com上运行正常。
/* eslint-disable */
import "https://deno.land/[email protected]/dotenv/load.ts";
import { Client } from "https://deno.land/x/mysql/mod.ts";
const client = await new Client().connect({
hostname: Deno.env.get("DATABASE_HOST"),
username: Deno.env.get("DATABASE_USER"),
db: Deno.env.get("DATABASE_NAME"),
password: Deno.env.get("DATABASE_PASS"),
port: Deno.env.get("DATABASE_PORT"),
});
const server = Deno.listen({ port: 8080 });
console.log(`HTTP webserver running. Access it at: http://localhost:8080/`);
let counter = 0;
for await (const conn of server)
{
serveHttp(conn);
}
async function serveHttp(conn: Deno.Conn)
{
const httpConn = Deno.serveHttp(conn);
for await (const requestEvent of httpConn)
{
counter++;
const url = new URL(requestEvent.request.url);
switch (url.pathname)
{
case "/":
{
const sentence = url.searchParams.get("sentence");
const sqlStatus = save2MySQL(sentence);
console.log(sqlStatus);
break;
}
default:
requestEvent.respondWith(new Response(counter as unknown as string, { status: 200, }),);
}
}
}
async function save2MySQL(sentence: string)
{
console.log("Attempting to save data to the datbase");
// ...
return result;
}
但Deno Deploy Classic将于2026年 7月 20日关闭,他们正在迁移到新的Deno Deploy平台。
因此我尝试部署相同的GitHub URL(只有一个main-esm.ts文件)——我在deno控制台设置里把Entrypoint设置为main-esm.ts。
但Deploy总是失败——我似乎无法把这个简单的单文件Deno脚本从dash迁移到控制台。

解决方案
看起来是一个版本兼容性问题。
Deno.listen() + Deno.serveHttp() 是新Deploy不再支持的旧版底层HTTP API。Deno.serveHttp 在Deno 1.35版本中被弃用,后续版本中被移除。
另请参阅: https://docs.deno.com/deploy/migration_guide/
Deno.serve({ port: 8080 }, async (req: Request): Promise<Response> =>
{
console.log(`HTTP webserver running. Access it at: http://localhost:8080/`);
counter++;
const url = new URL(req.url);
switch (url.pathname)
{
case "/":
{
const sentence = url.searchParams.get("sentence");
const sqlStatus = save2MySQL(sentence);
console.log(sqlStatus);
return new Response("OK", { status: 200 });
break;
}
default:
return new Response(String(counter), { status: 200 });
}
});
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。