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

跟随Ben Awad的lireddit教程配置MikroORM对接Apollo与PSQL遇错求解

配置问题修复方案

1. 修复ApolloServer参数不匹配报错

该报错由版本差异导致:你使用了v4及以上版本的apollo-server-express,而Ben教程使用的是v3版本,新版配置要求补充必填字段,两种修复方式可选:

方式1:兼容新版apollo-server-express

按如下代码修改初始化逻辑:

import { ApolloServer } from '@apollo/server';
import { expressMiddleware } from '@apollo/server/express4';
import { ApolloServerPluginDrainHttpServer } from '@apollo/server/plugin/drainHttpServer';
import http from 'http';

// 原有初始化逻辑
const orm = await MikroORM.init<PostgreSqlDriver>(config);
await orm.getMigrator().up();
const app = express();
const httpServer = http.createServer(app);

// 修正后的ApolloServer配置
const apolloServer = new ApolloServer({
  schema: await buildSchema({
    resolvers: [HelloResolver, PostResolver],
    validate: false
  }),
  // 补充新版必填的插件配置
  plugins: [ApolloServerPluginDrainHttpServer({ httpServer })],
});

// 新版要求先启动服务再挂载中间件
await apolloServer.start();
app.use('/graphql', expressMiddleware(apolloServer, {
  context: () => ({ em: orm.em })
}));

方式2:回退到教程匹配版本

直接安装v3版本即可沿用教程原写法:

npm i apollo-server-express@3.10.3

2. 修复buildSchema的validate属性不存在报错

该报错由type-graphql版本过高导致:2.x版本移除了顶层validate配置项,两种修复方式可选:

方式1:回退到教程匹配版本

npm i type-graphql@1.1.1 reflect-metadata@0.1.13

方式2:适配2.x版本配置

修改buildSchema配置,将validate: false替换为:

validate: { enable: false }

3. 修复PostResolver返回类型不匹配+GraphQL不识别Post解析器问题

第一步:修正em.find的泛型声明

显式指定返回类型匹配Post实体:

@Resolver()
export class PostResolver {
    @Query(() => [Post])
    posts(@Ctx() { em }: MyContext): Promise<Post[]> {
        // 补充泛型声明
        return em.find<Post>(Post, {});
    }
}

第二步:检查Post实体注解

确保同时添加MikroORM和GraphQL的装饰器,漏加@ObjectType会导致GraphQL无法识别Post类型:

import { Entity, PrimaryKey, Property } from "@mikro-orm/core";
import { ObjectType, Field, Int } from "type-graphql";

@ObjectType() // GraphQL类型注解,必填
@Entity() // MikroORM实体注解,必填
export class Post {
  @Field(() => Int)
  @PrimaryKey()
  id!: number;

  @Field(() => String)
  @Property()
  createdAt: Date = new Date();

  @Field(() => String)
  @Property({ onUpdate: () => new Date() })
  updatedAt: Date = new Date();

  @Field()
  @Property()
  title!: string;
}

第三步:检查MikroORM配置

确保mikro-orm.config.ts中正确注册了Post实体:

import { Post } from "./entities/Post";
import { Options, PostgreSqlDriver } from "@mikro-orm/postgresql";

export default {
  // 其他配置省略
  entities: [Post],
  // 也可以用路径匹配写法:entities: ['./dist/entities/*.js'], entitiesTs: ['./src/entities/*.ts']
  type: 'postgresql',
} as Options<PostgreSqlDriver>;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:51:01