标签: nestjs

如何解决此 TypeORM 错误“EntityRepository 已弃用,请改用 Repository.extend 函数”?

但是,我在 Repository 类中找不到任何 Repository.extend 方法,文档中也没有任何相关内容。怎么解决这个问题呢?

类型版本:“^0.3.0”

我正在使用 Nest js 并尝试创建自定义存储库。

typeorm nestjs

25
推荐指数
3
解决办法
5万
查看次数

如何在 NestJS 中使用 TypeORM (MongoDB) 自定义存储库?

我有个问题。随着@EntityRepository装饰器在 中被标记为已弃用typeorm@^0.3.6,现在推荐的或 TypeScript 友好的方式来为 NestJS 中的实体创建自定义存储库?之前的自定义存储库如下所示:

// users.repository.ts
import { EntityRepository, Repository } from 'typeorm';
import { User } from './user.entity';

@EntityRepository(User)
export class UsersRepository extends Repository<User> {
  async createUser(firstName: string, lastName: string): Promise<User> {
    const user = this.create({
      firstName,
      lastName,
    });

    await this.save(user);

    return user;
  }
}
Run Code Online (Sandbox Code Playgroud)

由于 NestJS 默认配置了 TypeScript 支持,因此我可以usersRepository.createUser()在这样的服务中毫无问题地调用:

// users.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from './user.entity';
import …
Run Code Online (Sandbox Code Playgroud)

mongodb typescript typeorm nestjs

25
推荐指数
2
解决办法
3万
查看次数

类验证器 - 验证对象数组

我正在将类验证器包与 NestJS 一起使用,并且我希望验证一组对象,这些对象需要恰好具有 2 个具有相同布局的对象:

到目前为止,我有:

import { IsString, IsNumber } from 'class-validator';

export class AuthParam {
  @IsNumber()
  id: number;

  @IsString()
  type: string;

  @IsString()
  value: string;
}
Run Code Online (Sandbox Code Playgroud)

import { IsArray, ValidateNested } from 'class-validator';
import { AuthParam } from './authParam.model';

export class SignIn {
  @IsArray()
  @ValidateNested({ each: true })
  authParameters: AuthParam[];
}
Run Code Online (Sandbox Code Playgroud)

每个@kamilg 响应(我能够强制执行 2 个元素):

import { IsArray, ValidateNested, ArrayMinSize, ArrayMaxSize } from 'class-validator';
import { AuthParam } from './authParam.model';

export class SignInModel {
  @IsArray()
  @ValidateNested({ each: true …
Run Code Online (Sandbox Code Playgroud)

arrays validation typescript class-validator nestjs

24
推荐指数
2
解决办法
4万
查看次数

Nest.js 验证字符串数组(如果仅存在已定义的字符串)

在控制器级别的 Nest.js 应用程序中,我必须验证 DTO。

我很难检查项目是否不为空(如果任何列表项目为null或,则请求应被拒绝undefined

下面的代码演示了我配置的验证。

import { ArrayMinSize, IsArray } from 'class-validator'

export class ReminderPayload {
    // ...
    @IsArray()
    @ArrayMinSize(1)
    recipients: string[]
}
Run Code Online (Sandbox Code Playgroud)

问题

  1. 我正在寻求帮助来拒绝带有身体数据的请求,例如
{
    "recipients": [
        null
    ]
}
Run Code Online (Sandbox Code Playgroud)
  1. 如何验证数组项是否string唯一(如果对象位于数组项位置,则应拒绝处理)?

聚苯乙烯

'class-validator'注入成功,它为我的 API 生成了一些验证结果。

validation request typescript nestjs

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

如何使用 NestJS 创建带参数的嵌套路由

我需要构建一个 API,其中大多数路由都以一个通用 URL 部分为前缀,该部分也有一个参数。

在我的具体情况下,我的路线需要看起来像:

/accounts/:account/resource1/:someParam

/accounts/:account/resource2/:someParam/whatever

/accounts/:account/resource3/

/accounts/:account/resource4/subResource/

等等..

所以最好我会创造一个家长的路线/accounts/:account/,将包含儿童路由(resource1resource2resource3resource4,等...)。

我还需要:account可以从所有子路由访问该参数。

使用 NestJS 实现这一目标的最佳方法是什么?

javascript api node.js typescript nestjs

23
推荐指数
4
解决办法
2万
查看次数

带有 dotenv 和 TypeScript 的环境变量

我创建这个.env文件:

TYPE=xxx
HOST=xxx,
PORT=xxx,
USERNAME=xxx,
PASSWORD=xxx,
DATABASE=xxx,
Run Code Online (Sandbox Code Playgroud)

在我的文件中,我以这种方式使用:

import * as dotenv from "dotenv";

dotenv.config();

export const typeOrmConfig: TypeOrmModuleOptions = {
    port: process.env.PORT
}
Run Code Online (Sandbox Code Playgroud)

但我可以用我只能port从变量.env文件,我不能用变量的休息,谁能告诉我,为什么我不能用我的瓦尔的休息吗?

javascript node.js typescript nestjs dotenv

23
推荐指数
3
解决办法
4万
查看次数

Nest.js 中的猫鼬子文档

我正在将我的应用程序从 express.js 移动到 Nest.js,并且我找不到一种方法来引用另一个 mongoose Schema,而不使用使用 mongoose.Schema({...}) 声明 Schema 的旧方法。

让我们使用文档中的示例,以便我可以澄清我的问题:

@Schema()
  export class Cat extends Document {
  @Prop()
  name: string;
}

export const CatSchema = SchemaFactory.createForClass(Cat);
Run Code Online (Sandbox Code Playgroud)

现在,我想要的是这样的:

@Schema()
export class Owner extends Document {
  @Prop({type: [Cat], required: true})
  cats: Cat[];
}

export const OwnerSchema = SchemaFactory.createForClass(Owner);
Run Code Online (Sandbox Code Playgroud)

当我以这种方式定义模式时,我会收到一个错误,类似于:无效的模式配置:Cat不是数组中的有效类型cats

那么,使用这种更面向对象的方法来定义架构,在另一个架构中引用一个架构的正确方法是什么?

schema reference subdocument nestjs

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

NestJS - 如何在主应用程序模块文件中使用 .env 变量进行数据库连接

我正在开发我的第一个 NestJS 应用程序,它在app.module.ts.

但是根据我们的要求,我不得不从环境文件中选择数据库配置值。为此,我遵循了 nestjs 文档网站上的配置文档 - https://docs.nestjs.com/techniques/configuration

但问题是我需要在同一个文件中使用 .env 变量进行数据库连接,这是失败的。

这是我运行良好的原始代码:

@Module({
  imports: [
    MongooseModule.forRoot(`mongodb+srv://myusername:mypassword@myhost.net?retryWrites=true&w=majority&db=dbname`, { useNewUrlParser: true, dbName: 'dbname' }),
    ProductModule,
    CategoryModule,
  ],
  controllers: [
    AppController,
    HealthCheckController,
  ],
  providers: [AppService, CustomLogger],
})
Run Code Online (Sandbox Code Playgroud)

现在,我想从.ENV文件,这是喜欢挑选那些DB值local.envdev.env取决于环境等。现在,我的这段代码不起作用:

@Module({
  imports: [
    ConfigModule.forRoot({ envFilePath: `${process.env.NODE_ENV}.env` }),
    MongooseModule.forRoot(`mongodb+srv://${ConfigModule.get('DB_USER')}:${ConfigModule.get('DB_PASS')}@myhost.net?retryWrites=true&w=majority&db=dbname`, { useNewUrlParser: true, dbName: 'dbname' }),
    ProductModule,
    CategoryModule,
  ],
  controllers: [
    AppController,
    HealthCheckController,
  ],
  providers: [AppService, CustomLogger],
})
Run Code Online (Sandbox Code Playgroud)

javascript environment-variables node.js nestjs dotenv

23
推荐指数
5
解决办法
2万
查看次数

为什么 cookie 不通过 Next.js 中的 getServerSideProps 发送到服务器?

Cookies不是通过 发送到服务器的getServerSideProps,下面是前端的代码:

export async function getServerSideProps() {
  const res = await axios.get("http://localhost:5000/api/auth", {withCredentials: true});
  const data = await res.data;
  return { props: { data } }
}
Run Code Online (Sandbox Code Playgroud)

在服务器上,我有一个检查访问 JWT 令牌的策略。

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

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

也就是说,当我通过getServerSidePropscookie 发送请求时,不会到达服务器,尽管如果我发送,例如通过useEffect …

node.js jwt reactjs next.js nestjs

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

TypeORM CLI:未发现数据库架构发生变化

我正在使用 NestJS 和 TypeORM 开发应用程序。每当我尝试从我的实体生成迁移(通过运行typeorm migration:generate)时,我都会收到以下消息:

No changes in database schema were found - cannot generate a migration. To create a new empty migration use "typeorm migration:create" command
Run Code Online (Sandbox Code Playgroud)

我什至删除了所有现有的迁移文件(从迁移文件夹中)以排除任何冲突的可能性。

在我将应用程序的模块文件夹结构更改为:

src
 |- config
 |   |- database
 |       |- mysql
 |           |- cli-configuration.ts
 |- migrations
 |- module1
     |- controller
     |- entity
     |- service
Run Code Online (Sandbox Code Playgroud)

可以看出,migrations文件夹就在下面src,每个模块都有一个entity文件夹,其中放置了该模块的实体。所有 ormconfig 设置都来自cli-configuration.ts文件。

package.json文件中,我添加了以下内容scripts

{
  ...
  "scripts": {
    ...
    "typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js …
Run Code Online (Sandbox Code Playgroud)

migration typeorm nestjs

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