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

Nuxt 3单例依赖注入最佳实践及第三方实例复用方案

企业级项目中Supabase与Ghost CMS实例初始化的模块化最佳实践

核心原则

  • 单一职责:每个服务的初始化逻辑单独封装,便于维护和测试
  • 环境变量校验:避免空值或无效配置导致的运行时错误
  • 单例模式:确保全项目复用同一个实例,减少资源消耗
  • 类型安全(TypeScript):为实例添加类型定义,提升开发体验

目录结构建议

src/
├── server/
│   ├── routes/
│   │   └── posts.get.ts
│   └── services/
│       ├── ghost/
│       │   ├── index.ts
│       │   └── types.ts(可选,类型定义)
│       └── supabase/
│           ├── index.ts
│           └── types.ts(可选,类型定义)
└── env.d.ts(全局环境变量类型)

具体实现代码

1. Ghost CMS 服务封装

server/services/ghost/index.ts

import GhostContentAPI from '@tryghost/content-api';

// 环境变量校验,企业级项目建议主动抛出错误
if (!process.env.GHOST_URL) {
  throw new Error('GHOST_URL 环境变量未配置');
}
if (!process.env.GHOST_API_KEY) {
  throw new Error('GHOST_API_KEY 环境变量未配置');
}

// 初始化单例实例
const ghostApi = new GhostContentAPI({
  url: process.env.GHOST_URL,
  key: process.env.GHOST_API_KEY,
  version: 'v5.0'
});

// 导出实例供全项目复用
export default ghostApi;

2. Supabase 服务封装

server/services/supabase/index.ts

import { createClient } from '@supabase/supabase-js';

// 环境变量校验
if (!process.env.SUPABASE_URL) {
  throw new Error('SUPABASE_URL 环境变量未配置');
}
if (!process.env.SUPABASE_SERVICE_ROLE_KEY) {
  throw new Error('SUPABASE_SERVICE_ROLE_KEY 环境变量未配置');
}

// 初始化单例实例
const supabaseClient = createClient(
  process.env.SUPABASE_URL,
  process.env.SUPABASE_SERVICE_ROLE_KEY
);

// 导出实例供全项目复用
export default supabaseClient;

3. 在路由中调用实例

server/routes/posts.get.ts

import ghostApi from '../services/ghost';
import supabaseClient from '../services/supabase';

export async function getPosts() {
  // 调用Ghost API获取文章列表
  const ghostPosts = await ghostApi.posts.browse({ limit: 10 });
  
  // 调用Supabase查询数据
  const { data: supabasePosts, error } = await supabaseClient
    .from('posts')
    .select('*')
    .limit(10);
  
  if (error) {
    throw new Error(`Supabase 查询错误: ${error.message}`);
  }
  
  return { ghostPosts, supabasePosts };
}

额外优化建议

  • 添加类型定义:在对应服务的types.ts中定义数据接口(比如Post),提升代码类型安全
  • 统一错误处理:在服务层封装API调用的错误逻辑,避免路由层重复编写错误处理代码
  • 测试友好:将初始化逻辑抽离,便于单元测试时注入模拟实例
  • 多环境配置:结合配置文件管理开发/测试/生产环境的不同参数

内容的提问来源于stack exchange,提问作者Yashwardhan Pauranik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:07:23