标签: nestjs

尝试保留未发现的对象类型实体

问题

Nest.js我是和的新手Mikro-ORM,我必须将其作为工作要求来学习。

这个栈需要TypeScript,我打心底里鄙视,但是又不得不做。

我已经设置了我的应用程序,当我执行时npm run start:dev,它启动时没有问题。

但是,当我尝试向数据库添加某些内容时,它会突然出现并给出以下错误块:

[Nest] 5368   - 07/03/2021, 11:52:15 PM   [ExceptionsHandler] Trying to persist not discovered entity of type object. +183188ms
ValidationError: Trying to persist not discovered entity of type object.
    at Function.notDiscoveredEntity (/home/lazar/tuts/backend/node_modules/@mikro-orm/core/errors.js:51:16)
    at SqlEntityManager.persist (/home/lazar/tuts/backend/node_modules/@mikro-orm/core/EntityManager.js:438:48)
    at SqlEntityManager.persistAndFlush (/home/lazar/tuts/backend/node_modules/@mikro-orm/core/EntityManager.js:449:20)
    at SqlEntityRepository.persistAndFlush (/home/lazar/tuts/backend/node_modules/@mikro-orm/core/entity/EntityRepository.js:21:23)
    at UsersService.create (/home/lazar/tuts/backend/dist/users/users.service.js:47:35)
    at UsersController.create (/home/lazar/tuts/backend/dist/users/users.controller.js:25:40)
    at /home/lazar/tuts/backend/node_modules/@nestjs/core/router/router-execution-context.js:38:29
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
    at async /home/lazar/tuts/backend/node_modules/@nestjs/core/router/router-execution-context.js:46:28
    at async /home/lazar/tuts/backend/node_modules/@nestjs/core/router/router-proxy.js:9:17
Run Code Online (Sandbox Code Playgroud)

这是我第一次走进这个堆栈,我不知道该错误意味着什么。当我谷歌这个错误时,我没有得到任何有用的信息。我该怎么做才能让它消失?

相关代码

  • 实体 ( User.ts)
import { Entity, PrimaryKey, …
Run Code Online (Sandbox Code Playgroud)

postgresql typescript nestjs mikro-orm

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

Nest js Docker 找不到模块 dist/main

我正在使用 Docker-compose 构建 Nest.js 应用程序。\n问题是当我尝试“docker-compose up prod”时,它显示“错误:找不到模块 \'/usr/src/app/dist/main”。 \n因此,我探索了产品映像中的文件,但我可以找到 dist 文件夹。另外,我运行 dist/main 并且它有效。但是,我尝试了 docker-compose up prod,它显示了上述错误。\n在此输入图像描述

\n

此外,当我尝试“docker-compose up dev”时。它工作得很好,为主机创建了一个 dist 文件夹。dev 和 prod 之间的主要区别在于 dev 使用 npm run start:dev 的命令,而 prod 使用 npm run start:prod。

\n

这是我的 DockerFile

\n
\nWORKDIR /usr/src/app\nCOPY package*.json ./\nRUN npm install rimraf\nRUN npm install --only=development\nCOPY . .\n\nRUN npm run build\n\nFROM node:12.19.0-alpine3.9 as production\nARG NODE_ENV=production\nENV NODE_ENV=${NODE_ENV}\nWORKDIR /usr/src/app\nCOPY package*.json ./\nRUN npm install --only=production\nCOPY . .\nCOPY --from=development /usr/src/app/dist ./dist\nCMD ["node", "dist/main"]\n
Run Code Online (Sandbox Code Playgroud)\n

这是我的 docker-compose.yaml

\n
\nservices:\n    proxy:\n        image: …
Run Code Online (Sandbox Code Playgroud)

node.js docker docker-compose nestjs

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

模型“订单”的基础表不存在。错误代码:P1014(Prisma)

我有如下问题

$ prisma migrate dev --name "ok"
    
Error: P3006
    
Migration `2021080415559_order_linking` failed to apply clearnly to the shadow database.
Error code: P1014
Error:
The underlying table for model 'Order' does not exist.
Run Code Online (Sandbox Code Playgroud)

如何修复它?

nestjs prisma prisma2

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

控制器 Nestjs 中的方法排序错误

我在 Nestjs 中有这个基本的 CRUD 方法。我面临的问题是,当我getCurrentUserId()在所有方法的顶部应用该方法时,它工作正常,但当我在底部应用该方法时,它不起作用并给出错误。中间件有什么问题吗?

user.controller.ts

@Controller('users')
@Serialize(UserDto)
export class UsersController {
  constructor(private usersService: UsersService) {}

  @Post('/signup')
  create(@Body() createUserDto: CreateUserDto): Promise<User> {
    return this.usersService.create(createUserDto);
  }

  @Get('/@:userName')
  async getUserByUsername(@Param('userName') userName: string) {
    const user = await this.usersService.findByName(userName);
    console.log(userName);
    if (!user) {
      throw new NotFoundException('User Not Found');
    }

    return user;
  }

  //! Testing for current user
  @Get('/current')
  @UseGuards(JwtAuthGuard)
  async getCurrentUserId(@CurrentUser() id: string) {
    console.log('running endpoint');
    return id;
  }
}
Run Code Online (Sandbox Code Playgroud)

current-user.decorator.ts

import { createParamDecorator, ExecutionContext } from '@nestjs/common';

export const CurrentUser …
Run Code Online (Sandbox Code Playgroud)

javascript nestjs

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

NestJS - 如何在 Swagger 中公开参数

我正在使用 NestJs。我有这个控制器:

@Get(':id')
  @ApiOperation({ summary: 'Get action by id' }) 
  findById(@Param('id') id: string, @Query() query?: SelectQuery & PopulateQuery): Promise<Action> {
    return this.actionService.findById(id, query);
  }
Run Code Online (Sandbox Code Playgroud)

当我在 Swagger 中打开页面时,它说没有可用的参数。

在Swagger中,如何将参数“id”作为输入框,以便我可以在Swagger(浏览器)中使用它?

谢谢。

swagger swagger-ui nestjs

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

如何从jwt策略中获取有效负载?

我有 jwt 策略:

export class JwtStrategy extends PassportStrategy(Strategy, "jwt") {
    constructor() {
        super({
            ignoreExpiration: false,
            secretOrKey: "secret",
            jwtFromRequest: ExtractJwt.fromExtractors([
                (request: Request) => {
                let data = request.cookies['access'];
                    return data;
                }
            ]),
        });
    }

    async validate(payload: any){
        return payload;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的控制器:

export class AuthController {
    constructor(private authService: AuthService) {}

    @UseGuards(AuthGuard("jwt"))
    @Get()
    getPayload() {
        //here I need to get the payload that was returned in jwt strategy
    }
}
Run Code Online (Sandbox Code Playgroud)

那么如何获取 jwt 策略中返回的控制器中的有效负载呢?

node.js jwt nestjs nestjs-jwt

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

Nest 无法解析 UsersService 的依赖关系(UserModel,?)

我的用户.module.ts:

import { forwardRef, Module } from '@nestjs/common';
import { UsersService } from './users.service';
import { UsersController } from './users.controller';
import { UserSchema } from './schemas/user.schema';
import { MongooseModule } from '@nestjs/mongoose';
import { AuthModule } from 'src/auth/auth.module';


@Module({
  imports: [MongooseModule.forFeature([{name: 'User', schema: UserSchema}]),AuthModule],
  controllers: [UsersController],
  providers: [UsersService],
  exports: [UsersService]
})
export class UsersModule {}
Run Code Online (Sandbox Code Playgroud)

我的 auth.module.ts

import { forwardRef, Module } from '@nestjs/common';
import { AuthService } from './auth.service';
import { UsersModule } from '../users/users.module';
import { PassportModule } …
Run Code Online (Sandbox Code Playgroud)

javascript web-applications node.js nestjs

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

NestJS 微服务错误“没有匹配的消息处理程序”

我正在构建一个应用程序,其中的微服务通过 RabbitMQ(请求-响应模式)进行通信。
一切正常,但我仍然遇到错误“远程服务中没有定义匹配的消息处理程序”的问题。-
当我将 POST 发送到客户端应用程序时,它应该只是通过客户端(ClientProxy)发送带有数据的消息,并且消费者应用程序应该响应。该功能确实有效,但总是只能第二次。我知道这听起来很奇怪,但在我的第一个 POST 请求中,总是有来自客户端的错误,而我的每一个 POST 请求都有效。然而这个问题在我的整个应用程序中随处可见,因此特定的 POST 请求仅用于示例。

这是代码:

客户:

@Post('devices')
async pushDevices(
    @Body(new ParseArrayPipe({ items: DeviceDto }))
    devices: DeviceDto[]
    ) {
    this.logger.log('Devices received'); 
    return this.client.send(NEW_DEVICES_RECEIVED, devices)
}
Run Code Online (Sandbox Code Playgroud)

消费者:

 @MessagePattern(NEW_DEVICES_RECEIVED)
 async pushDevices(@Payload() devices: any, @Ctx() context: RmqContext) {
    console.log('RECEIVED DEVICES');
    console.log(devices);
    const channel = context.getChannelRef();
    const originalMsg = context.getMessage();
    channel.ack(originalMsg);
    return 'ANSWER';
  }
Run Code Online (Sandbox Code Playgroud)

客户端的 RMQ 设置为queueOptions: {durable: true},消费者也有queueOptions: {durable: true}noAck: false

请您知道可能会导致问题的原因吗?我尝试使用 JSON.stringify …

rabbitmq docker microservices nestjs

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

Nestjs - 使用可用的第三方库的自定义类的正确方法是什么

我是 NestJS 的新手,我没有找到任何明确的说明来完成我需要做的事情。

我想使用 NestJS 构建我的后端,我以前从未使用过它,但只听说过它的好东西。因此,我要构建的后端服务器将使用 npmjs 中名为 ccxt 的第 3 方模块。在普通的节点应用程序中,我只需创建一个随机类(例如 CryptoManager),导入 ccxt 模块并编写一些按设定时间间隔运行的函数或其他函数。然后我将创建一个控制器类来实例化该 CryptoManager 类的对象,然后我可以返回它的响应。

但是我应该如何使用 NestJS 来做到这一点呢?为了拥有一个正在运行其他嵌套控制器/服务等中可用的后台任务的自定义类,我必须做什么?

这个类只是应该执行第 3 方 (ccxt) 模块函数并将结果存储在数据库中。但我希望能够从 Nestjs 应用程序中的所有点(从所有模块)执行此类方法。

我希望我的问题很清楚,如果不清楚,请告诉我。

node.js nestjs

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

Nestjs错误导入“reflect-metadata”无法在模块外部使用导入语句

现在我遇到了问题。当我添加多对多关系时,它不起作用。但之前是一对多关系。

  • 错误导入“reflect-metadata”无法在模块外部使用导入语句
  • 错误 ReferenceError: 导出未在 ES 模块范围中定义

我的拉取请求

用户实体.ts

@Entity({ name: 'users' })
export class User implements IUser {
  @PrimaryGeneratedColumn()
  id: string;

  @Column({ length: 25, nullable: true })
  name: string;

  @Column({ unique: true, length: 255 })
  email: string;

  @OneToMany(() => Message, (message) => message.user)
  messages?: Message[];

  @ManyToMany(() => Conversation, (conversations) => conversations.users)
  @JoinTable({
    name: 'user_conversation',
    joinColumn: { name: 'user_id', referencedColumnName: 'id' },
    inverseJoinColumn: { name: 'conversation_id' },
  })
  conversations: Conversation[];
}
Run Code Online (Sandbox Code Playgroud)

在文件conversation.entity.ts中

@Entity({ name: 'conversations' })
export class Conversation …
Run Code Online (Sandbox Code Playgroud)

javascript node.js typeorm nestjs

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