标签: nestjs

在nestJs中可以一起使用控制器和graphql解析器吗?

对于我的下一个项目,我想在前端使用 Graphql。此外,这个项目还应该提供一个 Rest-Api。现在我发现了这个非常伟大的框架“nestjs”,理论上可以将 Graphql 端点和 Rest 端点结合起来。不幸的是,如果这会导致问题,我在文档中找不到任何内容。下面的代码可以正常使用吗?

阿蒂克尔控制器:

@Controller('article')
@Resolver('Article')
export class ArticleController {
    constructor(private articleService: ArticleService){}

    @Get()
    @Query(returns => CArticle)
    async Article() {
     const dbElement=await this.articleService.getById("xy");
     return dbElement;
    }
}
Run Code Online (Sandbox Code Playgroud)

文章模块:

@Module({
    controllers:[ArticleController],
    providers:[ArticleService,ArticleController]
})
export class ArticleModule {}
Run Code Online (Sandbox Code Playgroud)

nestjs

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

TypeORM - 获取用户时从不从数据库返回密码

我使用带有 TypeORM 的 NestJs 创建了一个 REST API。基本上这是我的用户实体

@Entity('User')
export class User extends BaseEntity {
  @PrimaryGeneratedColumn()
  public id: number;

  @Column({ unique: true })
  public username: string;

  public passwordHash: string;
}
Run Code Online (Sandbox Code Playgroud)

当从数据库中获取用户时,敏感的密码信息也会被返回。但我只需要登录过程的密码字段。因此,在调用登录服务时,我将数据库用户的密码哈希值与客户端提供的密码进行比较。我永远不想将密码信息返回给客户端。

由于您可以想象从数据库中获取用户的情况经常发生,因此您必须经常从用户对象中删除密码信息。

假设您有一个组实体并且它们之间存在关系。在获取与组相关的用户时,您还必须注意组域中的敏感数据。

也许一些用户深深地嵌套在一个大 SQL 查询语句返回的对象中。有没有办法可以“隐藏”某些字段?打电话时,this.usersRepository.find()我会得到一个用户列表,每个用户都有一个id和一个username字段,但没有一个passwordHash字段。这会让事情变得更容易,因为我只需要在我的signIn流中获取哈希字段。

javascript node.js typescript typeorm nestjs

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

How do you inject a service in NestJS into a typeorm repository?

I have a UserRepository which handles creating/authenticating users infront of the database. I want to perform hashing & validation for the user's password, so I created a seperate service for that purpose, trying to follow single repsonsibility principle, which is declared like this:

@Injectable()
export default class HashService
Run Code Online (Sandbox Code Playgroud)

And I import it in my module:

@Module({
    imports: [TypeOrmModule.forFeature([UserRepository])],
    controllers: [AuthController],
    providers: [AuthService, HashService],
})
export class AuthModule {}
Run Code Online (Sandbox Code Playgroud)

I wish to inject it into UserRepository, I tried passing in …

typescript typeorm nestjs

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

TypeORM OneToMany 导致“ReferenceError:在初始化之前无法访问‘<Entity>’”

我有两个实体:UserHabit。一个用户可以创建多个习惯,因此我在用户上使用OneToMany关系(分别在习惯上使用ManyToOne)。

用户实体

import {Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, BeforeInsert, BeforeUpdate, OneToMany} from "typeorm";
import * as bcrypt from "bcryptjs";
import { Habit } from "../habits/habits.entity";

@Entity()
export class User {
    @PrimaryGeneratedColumn("uuid")
    id: string;

    @Column()
    name: string;

    @Column()
    email: string;

    @Column()
    password: string;

    @OneToMany(type => Habit, habit => habit.author)
    habits: Habit[];

    @CreateDateColumn()
    dateCreated: Date;

    @UpdateDateColumn()
    dateUpdated: Date;

    @BeforeInsert()
    @BeforeUpdate()
    async hashPassword(): Promise<void> {
        this.password = await bcrypt.hash(this.password,10);
    }

    async comparePassword(password: string): Promise<boolean> { …
Run Code Online (Sandbox Code Playgroud)

typescript typeorm nestjs nrwl-nx

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

禁止 Nestjs 中 DTO 的特定枚举值

我的“AppState”枚举具有以下可能的枚举值:

export enum AppState {
  SUCCESS,
  ERROR,
  RUNNING
}
Run Code Online (Sandbox Code Playgroud)

我有一个UpdateAppStateDTOappState它应该接受除RUNNING之外的每个枚举值。

export class UpdateAppStateDTO {
  @IsEnum(AppState)
  @NotEquals(AppState.RUNNING) // Doesn't work properly
  public appState: AppState;
}
Run Code Online (Sandbox Code Playgroud)

对于路线我有这个例子

  @Patch()
  public setState(@Body() { appState }: UpdateAppStateDTO): void {
    console.log(appState);
  }
Run Code Online (Sandbox Code Playgroud)

如果请求有一个空的正文或一个无效的枚举值,比如“foobar”,appState因为我得到了 400,这很好。

问题是当我发送“RUNNING”时,我仍然得到 200 而不是 400。

我怎样才能防止这种行为?

class-validator nestjs

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

NestJS - 如何使用装饰器创建嵌套模式

假设我想用猫鼬构建以下架构:

const userSchema = new Schema({
  name: {
    firstName: String,
    lastName: String
  }
})
Run Code Online (Sandbox Code Playgroud)

如何使用 NestJS 装饰器 ( @Schema()& @Prop()) 来实现?

我尝试这种方法,但没有运气:

@Schema()
class Name {
  @Prop()
  firstName: string;

  @Prop()
  lastName: string;
}

@Schema()
class User extends Document {
  @Prop({ type: Name })
  name: Name;
}
Run Code Online (Sandbox Code Playgroud)

我也不想使用该raw()方法。

mongoose mongodb mongoose-schema nestjs

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

在 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
查看次数