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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:31:06