美文网首页
TypeGraphql的引入

TypeGraphql的引入

作者: 辻子路 | 来源:发表于2019-08-07 09:30 被阅读0次

安装

  • 安装主包
npm i graphql @types/graphql type-graphql
  • 安装reflect-metadata,用来做类型反射
npm i reflect-metadata

注意: 我们必须确保该包在我们使用/导入 type-graphql或者我们的resolvers之前引用reflect-metadata,如下

import "reflect-metadata";

TypeScript配置

  • tsconfig.json配置如下选项
{
  "emitDecoratorMetadata": true,
  "experimentalDecorators": true
}
  • 因为TypeGraphQL基于Node.js LTS (8, 10) ,它使用了ES7(ES2016)的语法,所以还必须设置
{
  "target": "es2016" // or newer if your node.js version supports this
}
  • 由于graphql的订阅依赖AsyncIterator,所以我们还必须配置esnext.asynciterable
{
  "lib": ["es2016", "esnext.asynciterable"]
}

所有,总结上面的,tsconfig.json需要添加如下选项:

{
  "compilerOptions": {
    "target": "es2016",
    "module": "commonjs",
    "lib": ["es2016", "esnext.asynciterable"],
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  }
}

具体使用方法可以参考: Nest-Graphql的使用
,因为Nest也是基于TypeGraphql开发的,所以基本都差不多。下面介绍些额外的知识。

部署Graphql Server

因为typegraphql没有单独的部署server的方法,所以我们这里会用到apollo-server-koa(node的框架是koa)

import { ApolloServer } from 'apollo-server-koa';

然后创建schema,遍历加载所有的resolver

   // 创建graphql的schema
    const schema = await buildSchema({
        resolvers: loadResolvers(path.join(__dirname, 'resolver')),
        // automatically create `schema.gql` file with schema definition in project's working directory
        emitSchemaFile: true,
    });
// 加载所有resolver
function loadResolvers(dirPath: string): any[] {
    // tslint:disable-next-line:prefer-const
    let resolverArr: any[] = [];
    if (!fs.existsSync(dirPath)) { return resolverArr; }
    const list = fs.readdirSync(dirPath);
    list.forEach((filename) => {
        const file = path.join(dirPath, filename);
        const module = require(file);
        Object.keys(module).forEach((key) => {
            resolverArr.push(module[key]);
        });
    });
    return resolverArr;
}

最后就是创建server,并且应用于koa的中间件了

const server = new ApolloServer({
        schema,
        tracing: false,
        playground: {
            settings: {
                'request.credentials': 'include',
            },
        } as any,
        introspection: true,
    });
    const app = new Koa();
    server.applyMiddleware({ app });

下来就可以通过 监听端口/graphql 访问啦。

相关文章

  • TypeGraphql的引入

    安装 安装主包 安装reflect-metadata,用来做类型反射 注意: 我们必须确保该包在我们使用/导入 t...

  • TypeGraphql 尝试

    TypeGraphql 官方文档示例练习:

  • NestJS + TypeGraphQL + MySQL 从入门

    NestJS + TypeGraphQL + MySQL 从入门到实战视频教程(25 个视频) #1 Nestjs...

  • NestJS + TypeGraphQL + MySQL 从入门

    NestJS + TypeGraphQL + MySQL 从入门到实战视频教程(35 个视频) #1 Nestjs...

  • 2020 最新前后端编程学习视频

    2020 最新前后端编程学习视频 NestJS + TypeGraphQL + MySQL 从入门到实战视频教程(...

  • 2018-12-12 TypeGraphQL

    https://19majkel94.github.io/type-graphql/docs/introducti...

  • 引入

    古来圣贤皆寂寞, 月色幽幽酌酒欢; 酣饮兴起华章出, 无人知是山外音。

  • 引入

    我说我毕生的理想便是见到你给个拥抱,坐下来我们聊聊,平等的姿态,而不是个狂热的粉丝说句:“赵雷,我喜欢你”之后再也...

  • 引入

    与其羡慕他人的聪慧,不如自己勤奋补拙;与其羡慕他人的优秀,不如自己奋斗不止;与其羡慕他人的坚强,不如自己百炼成钢;...

  • css样式的引入方式

    有3种引入方式a、外部引入b、头部引入c、行内引入(内联引入) -------------------------...

网友评论

      本文标题:TypeGraphql的引入

      本文链接:https://www.haomeiwen.com/subject/pxundctx.html