如果你在尝试使用NestJS和GraphQL时遇到了困难

当我想要在NestJS上尝试使用GraphQL时遇到了困难。

我想要学习GraphQL,所以我打算先做一个待办事项应用程序,但遇到了一些困难,所以我想记录下来作为备忘录。

太长了,没时间阅读,可以简短概括一下吗?

    在 `tsconfig.json` 中加入 `skipLibCheck: true`,然后安装 `@nestjs/graphql`、`graphql-tools` 和 `graphql` 依赖包,再安装 `apollo-server-express`。最后编写至少一个 GraphQL 的 schema。

我会动。 (Wǒ huì .)

我会把流向和文件写在下面。

目录

    1. 创建一个NestJS应用程序

 

    安装GraphQL依赖关系

创建一个NestJS应用程序。

使用NestJS的命令行界面,根据URL进行安装预先准备,非常方便。

$ nest new nest-graphql
$ cd nest-graphql
$ npm run start

在本地主机的端口3000上以以下方式显示:

localhost_3000.png

2. 安装并设置GraphQL的依赖关系。

根据公式文档中的描述,我们将添加依赖关系并对app.module.ts进行更改。

$ npm i --save @nestjs/graphql graphql-tools graphql

我会添加 GraphQL 模块。

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
import { Module } from '@nestjs/common';
//ここから追記
import { GraphQLModule } from '@nestjs/graphql';
//ここまで追記

@Module({
  imports: [
    //ここから追記
    GraphQLModule.forRoot({
      debug: true,
      playground: true,
    }),
  //ここまで追記
  ],
})
export class AppModule {}

在记录完成之后,将启动服务器(会出现第一个错误)。

$ npm run start
node_modules/apollo-server-core/dist/ApolloServer.d.ts:5:8 - error TS1259: Module '"/nestjs-graphql/node_modules/@types/ws/index"' can only be default-imported using the 'esModuleInterop' flag

5 import WebSocket from 'ws';
         ~~~~~~~~~

  node_modules/@types/ws/index.d.ts:270:1
    270 export = WebSocket;
        ~~~~~~~~~~~~~~~~~~~
    This module is declared with using 'export =', and can only be used with a default import when using the 'esModuleInterop' flag.

Found 1 error(s).

一旦确认错误后发现TypeScript的定义有问题。将修复tsconfig.json以解决该问题,正如在GitHub的问题中所提到的。

{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es2017",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true
  },
  "exclude": ["node_modules", "dist"]
}

{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es2017",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    //ここから追記
    "skipLibCheck": true
  //ここまで追記
  },
  "exclude": ["node_modules", "dist"]
}

由于已修正所示错误,将启动服务器(同时也会消除错误)。

$ npm run start
 [Nest] 22047   - 2020-05-26 12:15:28 AM   [PackageLoader] The "apollo-server-express" package is missing. Please, make sure to install this library ($ npm install apollo-server-express) to take advantage of GraphQLModule. +10ms

因为显示要安装apollo-server-express,所以我按照显示的安装了apollo-server-express。(你好,又出现了错误)

$ npm install apollo-server-express
$ npm run start
UnhandledPromiseRejectionWarning: Error: Apollo Server requires either an existing schema, modules or typeDefs

因为需要schema、modules或typeDefs,所以我们将在app.module.ts中进行追加,并且先添加todo.graphql。

import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { join } from 'path';

@Module({
  imports: [
    GraphQLModule.forRoot({
      debug: false,
      playground: true,
      typePaths: ['./**/*.graphql'],
      definitions: {
        path: join(process.cwd(), 'src/graphql.ts'),
        outputAs: 'class',
      },
    }),
  ],
})
export class AppModule {}

接下来,您可以添加 todo.graphql 文件。(您可以根据个人喜好进行修改)

$ touch src/todo.graphql
type Query {
  getTodos: [Todo]
  todo(id: ID!): Todo
}

type Todo {
  title: String
  id: String
  description: String
}

我们将确保最后正常运作。

$ npm run start

如果运行成功并在playground上显示如下内容,则表示已完成适配工作。

Playground - http___localhost_3000_graphql.png

代码库

广告
将在 10 秒后关闭
bannerAds