标签: nestjs

错误:graphql-upload/package.json 中没有定义“exports”main

已经安装了 graphql-upload,执行

import { graphqlUploadExpress } from 'graphql-upload';

并收到此错误:错误:在 graphql-upload/package.json 中没有定义“exports”main

依赖项:

"graphql-upload": "^14.0.0",
"graphql": "15.8.0",
"graphql-request": "^4.2.0",
"graphql-tools": "^8.2.0",
"@nestjs/axios": "^0.0.7",
"@nestjs/common": "^8.4.1",
"@nestjs/config": "^1.1.5",
"@nestjs/core": "^8.4.1",
"@nestjs/graphql": "^9.1.2",
"@nestjs/platform-express": "^8.0.0",
Run Code Online (Sandbox Code Playgroud)

节点版本:v16.10.0

javascript graphql express-graphql nestjs

10
推荐指数
2
解决办法
1万
查看次数

类型错误:store.get 不是函数 - NestJs,缓存管理器

我正在按照NestJS 文档实现缓存。

为此创建新项目,以便文档示例与此没有区别。

  1. 导入 CacheModule.. 就像文档一样
import { CacheModule, Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [CacheModule.register()],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

Run Code Online (Sandbox Code Playgroud)
  1. 注入缓存管理器..
import { CACHE_MANAGER, Controller, Get, Inject } from '@nestjs/common';
import { Cache } from 'cache-manager';

@Controller()
export class AppController {
  constructor(
    @Inject(CACHE_MANAGER) private cacheManager: Cache,
  ) {}
}
Run Code Online (Sandbox Code Playgroud)
  1. 并使用它
  @Get()
  async getHello(): Promise<string> {
    const value: string = await this.cacheManager.get('hello'); …
Run Code Online (Sandbox Code Playgroud)

nestjs

10
推荐指数
2
解决办法
1万
查看次数

错误 [ERR_REQUIRE_ESM]:ES 模块的 require(),不支持 node_modules\wrap-ansi\index.js

在 Nestjs 项目中,我遇到了一个库的问题,我没有在代码中直接使用它,但它被第三方使用。

node_modules\wrap-ansi\index.js:2 中的 stringWidth = require('string-width') 不支持

这是 package.json 依赖项:

"dependencies": {
    "@nestjs-modules/mailer": "^1.9.1",
    "@nestjs/common": "^10.1.2",
    "@nestjs/config": "^3.0.0",
    "@nestjs/core": "^10.1.2",
    "@nestjs/event-emitter": "^2.0.2",
    "@nestjs/jwt": "^10.0.3",
    "@nestjs/mapped-types": "^2.0.2",
    "@nestjs/passport": "^10.0.0",
    "@nestjs/platform-express": "^10.1.2",
    "@nestjs/swagger": "^7.1.4",
    "@nestjs/throttler": "^4.0.0",
    "@nestjs/typeorm": "^10.0.0",
    "@ttshivers/automapper-classes": "^8.8.3",
    "@ttshivers/automapper-core": "^8.8.3",
    "@ttshivers/automapper-nestjs": "^8.8.3",
    "bcrypt": "^5.1.0",
    "class-transformer": "^0.5.1",
    "class-validator": "^0.14.0",
    "handlebars": "^4.7.8",
    "nodemailer": "^6.9.7",
    "passport": "^0.6.0",
    "passport-custom": "^1.1.1",
    "passport-jwt": "^4.0.1",
    "passport-local": "^1.0.0",
    "pg": "^8.11.0",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.2.0",
    "typeorm": "^0.3.16"
  },
  "devDependencies": {
    "@nestjs/cli": "^10.1.11",
    "@nestjs/schematics": "^10.0.1",
    "@nestjs/testing": "^10.1.2",
    "@types/bcrypt": …
Run Code Online (Sandbox Code Playgroud)

javascript node.js nestjs

10
推荐指数
2
解决办法
5203
查看次数

Nestjs依赖注入和DDD /清理架构

我正在尝试通过实现一个干净的架构结构来测试Nestjs,并且想验证我的解决方案,因为我不确定我是否知道执行此操作的最佳方法。请注意,该示例几乎是伪代码,并且缺少许多类型或泛型,因为它们不是讨论的重点。

从我的域逻辑开始,我可能想在类似于以下类的类中实现它:

@Injectable()
export class ProfileDomainEntity {
  async addAge(profileId: string, age: number): Promise<void> {
    const profile = await this.profilesRepository.getOne(profileId)
    profile.age = age
    await this.profilesRepository.updateOne(profileId, profile)
  }
}
Run Code Online (Sandbox Code Playgroud)

在这里,我需要访问profileRepository,但是按照干净架构的原理,我现在不想为实现而烦恼,所以我为此写了一个接口:

interface IProfilesRepository {
  getOne (profileId: string): object
  updateOne (profileId: string, profile: object): bool
}
Run Code Online (Sandbox Code Playgroud)

然后,将依赖项注入到ProfileDomainEntity构造函数中,并确保它遵循预期的接口:

export class ProfileDomainEntity {
  constructor(
    private readonly profilesRepository: IProfilesRepository
  ){}

  async addAge(profileId: string, age: number): Promise<void> {
    const profile = await this.profilesRepository.getOne(profileId)
    profile.age = age

    await this.profilesRepository.updateOne(profileId, profile)
  }
}
Run Code Online (Sandbox Code Playgroud)

然后创建一个简单的内存实现,让我运行代码:

class ProfilesRepository …
Run Code Online (Sandbox Code Playgroud)

domain-driven-design dependency-injection typescript clean-architecture nestjs

9
推荐指数
3
解决办法
2698
查看次数

将TypeORM存储库注入NestJS服务以进行模拟数据测试

有关如何在本期中执行此操作的讨论很长时间。

我已经尝试了许多建议的解决方案,但是运气并不好。

谁能提供一个具体示例,说明如何使用注入的存储库和模拟数据测试服务?

javascript node.js typescript nestjs

9
推荐指数
4
解决办法
4072
查看次数

GraphQL DataLoader应该将请求包装到数据库还是将请求包装到服务方法?

我有一个非常普通的GraphQL模式,如下所示(伪代码):

Post {
  commentsPage(skip: Int, limit: Int) {
    total: Int
    items: [Comment]
  }
}
Run Code Online (Sandbox Code Playgroud)

因此,为避免在请求多个Post对象时出现n + 1问题,我决定使用Facebook的Dataloader。

由于我正在使用Nest.JS 3层分层应用程序(Resolver-Service-Repository),因此我有一个问题:

应该使用DataLoader包装存储库方法还是应该使用Dataloder包装服务方法?

下面是我的返回Comments页面的服务方法的示例(即,从commentsPage属性解析器调用的此方法)。内部服务方法中,我使用2个存储库方法(#count#find):

@Injectable()
export class CommentsService {
    constructor(
        private readonly repository: CommentsRepository,
    ) {}

    async getCommentsPage(postId, dataStart, dateEnd, skip, limit): PaginatedComments {
        const counts = await this.repository.getCount(postId, dateStart, dateEnd);
        const itemsDocs = await this.repository.find(postId, dateStart, dateEnd, skip, limit);
        const items = this.mapDbResultToGraphQlType(itemsDocs);
        return new PaginatedComments(total, items)
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,我应该为每个存储库方法(#count, …

graphql nestjs dataloader

9
推荐指数
1
解决办法
241
查看次数

在 Nest.js 中接受表单数据

我已经在 Nestjs 中编写了身份验证路由,并希望将它与表单数据一起使用。我让它与 URL-encoded-form-data、JSON、文本一起工作,但是当我使用表单数据时没有在正文中收到任何东西,并且真的希望它像在前端一样使用表单数据我正在点击带有表单数据的路由。我已经尝试了所有可以在网络上找到的方法,但在这种情况下,没有一种方法对我有帮助。所以经过数小时的搜索和尝试,当我没有得到任何线索时,我在这里发布了我的问题。任何形式的帮助表示赞赏。

注册端点代码 这是我的注册端点代码

Main.ts 配置 我的 Main.ts 配置

空荡荡的身体,我正在上邮递员 空荡荡的身体,我正在上邮递员

body-parser nestjs req

9
推荐指数
1
解决办法
7993
查看次数

GraphQLError:必须提供查询根类型

我的后端 API 使用 NestJS、TypeORM 和 GraphQL。我收到以下错误:

GraphQLError [Object]: Query root type must be provided.
      at SchemaValidationContext.reportError (/home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/graphql/type/validate.js:88:19)
      at validateRootTypes (/home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/graphql/type/validate.js:107:13)
      at validateSchema (/home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/graphql/type/validate.js:52:3)
      at graphqlImpl (/home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/graphql/graphql.js:79:62)
      at /home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/graphql/graphql.js:28:59
      at new Promise (<anonymous>)
      at Object.graphql (/home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/graphql/graphql.js:26:10)
      at GraphQLSchemaFactory.<anonymous> (/home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/@nestjs/graphql/dist/schema-builder/graphql-schema.factory.js:49:52)
      at Generator.next (<anonymous>)
      at /home/wise-introvert/Container/Projects/the-notebook/app/server/node_modules/tslib/tslib.js:114:75
Run Code Online (Sandbox Code Playgroud)

这是我的文件结构和代码的样子: 在此处输入图片说明

有人可以帮帮我吗。我的仓库:https : //github.com/wise-introvert/nestjs-graphql-api.git

postgresql graphql typeorm nestjs

9
推荐指数
2
解决办法
6013
查看次数

在 NestJS 中使用与 GraphQL 中的 Input 和 Object 类型相同的类

我正在尝试设置我的 graphql resover 来处理一组对象,但无法配置 @Args 装饰器。

我创建了自己的 ArgsType

import { ArgsType, Field, Int, ObjectType } from '@nestjs/graphql';

@ArgsType()  // to be used as type in the resolver
@ObjectType()  // for schema generation 
export class Club {
 @Field(type => String)
 president: string;

 @Field(type => Int)
 members?: number;
}
Run Code Online (Sandbox Code Playgroud)

添加单个俱乐部的解析器工作正常!

 @Query(() => Int)
 async addClub(@Args() club: Club) {
  // handle stuff
  }
Run Code Online (Sandbox Code Playgroud)

但如果我想像这样提供一系列俱乐部

 @Query(() => Int)
   async addClubs(@Args({name: 'clubs', type: () => [Club]}) clubs: Array<Club>) {
   // handle stuff
  }
Run Code Online (Sandbox Code Playgroud)

这在 Nest …

typescript graphql nestjs

9
推荐指数
1
解决办法
2502
查看次数

MODULE_NOT_FOUND Nestjs 和 Swagger

我正在尝试将 Swagger 添加到我的 Nestjs 应用程序中。当我试图编译它时,会抛出找不到模块的错误。我使用 Nestjs 文档中的相同代码。这是我的 main.ts:

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  const config = new DocumentBuilder()
    .setTitle('Cats example')
    .setDescription('The cats API description')
    .setVersion('1.0')
    .addTag('cats')
    .build();
  const document = SwaggerModule.createDocument(app, config);
  SwaggerModule.setup('api', app, document);

  await app.listen(3000);
}
bootstrap();
Run Code Online (Sandbox Code Playgroud)

这是错误:

internal/modules/cjs/loader.js:883
  throw err;
  ^

Error: Cannot find module '@nestjs/core/router/route-path-factory'
Require stack:
- D:\BK\solidity\MVPApp\blockchain\back-end-student-wallet-v2\node_modules\@nestjs\swagger\dist\swagger-explorer.js
- D:\BK\solidity\MVPApp\blockchain\back-end-student-wallet-v2\node_modules\@nestjs\swagger\dist\swagger-scanner.js 
- D:\BK\solidity\MVPApp\blockchain\back-end-student-wallet-v2\node_modules\@nestjs\swagger\dist\swagger-module.js  
- D:\BK\solidity\MVPApp\blockchain\back-end-student-wallet-v2\node_modules\@nestjs\swagger\dist\index.js
- D:\BK\solidity\MVPApp\blockchain\back-end-student-wallet-v2\node_modules\@nestjs\swagger\index.js
- D:\BK\solidity\MVPApp\blockchain\back-end-student-wallet-v2\dist\main.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
    at Function.Module._load (internal/modules/cjs/loader.js:725:27)

Run Code Online (Sandbox Code Playgroud)

我正在使用 Node 14.15.1,@nestjs/swagger 5.0.0,swagger-ui-express:4.1.6

swagger typescript swagger-ui nestjs

9
推荐指数
2
解决办法
1632
查看次数