如何在Deno Deploy上结合Fresh框架正确部署Mongoose项目?
解决Deno Deploy上Fresh框架项目使用Mongoose的部署问题
1. 锁定兼容的Mongoose版本
Deno Deploy对npm模块的兼容逻辑和本地Deno环境有差异,Mongoose 6.7.x版本存在适配问题,建议降级到6.6.5(经验证可在Deno Deploy稳定运行),修改导入语句:
import mongoose from "npm:mongoose@6.6.5";
2. 优化数据库连接逻辑
Fresh框架基于Deno,需将数据库连接封装为单例模式,避免重复初始化:
创建db.ts文件:
import mongoose from "npm:mongoose@6.6.5"; let isConnected = false; export async function connectDB() { if (isConnected) return; try { await mongoose.connect(Deno.env.get("MONGODB_URI")!); isConnected = true; console.log("MongoDB连接成功"); } catch (error) { console.error("MongoDB连接失败:", error); throw error; } }
在需要数据库操作的路由/组件中调用连接方法,比如API路由:
import { Handlers } from "$fresh/server.ts"; import { connectDB } from "../db.ts"; import YourModel from "../models/YourModel.ts"; export const handler: Handlers = { async GET(_req) { await connectDB(); const data = await YourModel.find(); return new Response(JSON.stringify(data), { headers: { "Content-Type": "application/json" }, }); }, };
3. 配置Deno Deploy环境变量
在Deno Deploy控制台的项目设置中,添加MONGODB_URI环境变量,值为你的MongoDB连接字符串(禁止硬编码到代码中)。
4. 本地预验证
修改完成后,先在本地执行deno task build和deno task start,确认构建无报错后再推送到GitHub触发部署。若仍有Node.js核心模块缺失提示,可在deno.json中添加配置:
{ "nodeModulesDir": true, "compilerOptions": { "allowJs": true, "esModuleInterop": true } }
内容的提问来源于stack exchange,提问作者Bill Kalaitzo
相关产品推荐
相关产品推荐

