标签: nestjs

如何在 Nest.js 中提供静态 HTML 文件?

我想提供/dist位于 Nest 项目外部文件夹中的静态 HTML 文件。index.html已成功加载但无法加载任何 JS 文件(404错误)。

我有一个 Node/Express.js 项目,它使用

app.use('/', express.static('../client/dist'))
Run Code Online (Sandbox Code Playgroud)

它工作得很好。

然而,在 Nest 项目中,

app.setBaseViewsDir(join(__dirname, '../../client/dist'))
Run Code Online (Sandbox Code Playgroud)

不做的伎俩。

AppController我试过

import { Response } from 'express';

@Get()
  get(@Res() res: Response) {
    res.sendFile('index.html', {
      root: '../client/dist',
    });
  }
Run Code Online (Sandbox Code Playgroud)

但没有运气。

如前所述,index.html已成功加载。所以问题不是走错路。问题也不是 src-paths 错误,index.html因为在 Express 项目中使用了完全相同的文件。

/dist
  |-index.html
  |-main.js
  |-etc.
Run Code Online (Sandbox Code Playgroud)

在 index.html 中:

<script type="text/javascript" src="main.js"></script>
Run Code Online (Sandbox Code Playgroud)

当我将 dist 文件夹放入 Nest 项目(并调整路径)时,它也不起作用。

我找到了解决方案:

我现在使用 express 模块:

import * as express from 'express'; …
Run Code Online (Sandbox Code Playgroud)

javascript static-files node.js express nestjs

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

NestJs:无法读取模块文件中的环境变量但可以读取服务文件?

我的.envNestJs 项目的根目录中有一个文件,其中包含一些 env 变量。

奇怪的是,我能够读取服务文件中的变量,但不能读取模块文件中的变量。

所以在像这样的服务文件中users.service.ts,这有效:

saveAvatar() {
    const path = process.env.AVATAR_PATH    // returns value from .env
}
Run Code Online (Sandbox Code Playgroud)

但是,当访问模块文件中的路径时,如auth.module.ts,这将返回一个空值:

@Module({
    imports: [
       JwtModule.register({
          secretOrPrivateKey: process.env.SECRET   // process.env.SECRET returns an empty string
       })
    ]
})
Run Code Online (Sandbox Code Playgroud)

为什么呢?如何.env在 NestJs 中可靠地访问文件中的环境变量?

javascript node.js typescript nestjs dotenv

12
推荐指数
4
解决办法
8870
查看次数

NestJS 使用默认记录器或 npm(如 winston)登录文件、数据库等

NestJS 使用默认记录器实现。它将输出发送到控制台。

我可以知道,如何配置默认记录器以将输出发送到文件、数据库。

此外,

如果我想在 NestJS 中使用 Winston,如何使用/注入/扩展各种传输选项。

它不应该与 NestJS 紧密耦合,并且始终能够替换为其他一些记录器。

logging node.js winston nestjs

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

为 NestJs REST API 创建 DTO、BO 和 DAO

我想开始使用 NestJs 创建 REST API,但我不确定如何设置可扩展的层通信对象。

因此,从有关如何开始的文档中,我提出了UsersController处理 HTTP 请求和响应的方法,UsersService处理控制器和数据库访问器之间的逻辑以及UsersRepository负责数据库管理的方法。

我使用NestJs提供的TypeORM 包,所以我的数据库模型是

@Entity('User')
export class UserEntity extends BaseEntity {
  @PrimaryGeneratedColumn('uuid')
  id: string;

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

  @Column()
  passwordHash: string;

  @Column()
  passwordSalt: string;
}
Run Code Online (Sandbox Code Playgroud)

但是您可能知道,这个模型必须映射到其他模型,反之亦然,因为您不想将密码信息发送回客户端。我将尝试用一个简单的例子来描述我的 API 流程:


控制器

首先,我有一个用于GET /users/:id和的控制器端点POST /users

  @Get(':id')
  findById(@Param() findByIdParamsDTO: FindByIdParamsDTO): Promise<UserDTO> {
    // find user by id and return it
  }

  @Post()
  create(@Body() createUserBodyDTO: CreateUserBodyDTO): Promise<UserDTO> {
    // create a …
Run Code Online (Sandbox Code Playgroud)

onion-architecture typescript clean-architecture nestjs

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

Typeorm 关系 - 按 id 保存

我对这些关系有点困惑,因为我习惯通过 id 保存关系,而我发现的文档和示例建议获取整个对象并使用它(这不是很奇怪吗???)

我在 github 上发现了这个问题(https://github.com/typeorm/typeorm/issues/447),他们建议使用仅具有 id 属性的对象,但它是从 2017 年开始的。这是一个好方法吗?做吗?这仍然是唯一的方法吗?(我觉得这很蹩脚)

async create( @Body() product: Product) {
    product.category = <any>{ id: product.category };
    return { payload: await this.repository.persist(product) };
}
Run Code Online (Sandbox Code Playgroud)

另一位建议将该列命名为categoryId,它将按预期工作(使用 id 而不是 object),但为什么呢?这个名字有什么关系??

@Entity()
class Product {

     @Column({ type: "int", nullable: true })
     categoryId: number;

     @ManyToOne(type => Category)
     @JoinColumn({ name: "categoryId" })
     category: Category;

}
Run Code Online (Sandbox Code Playgroud)

我很困惑,请帮忙^_^

typeorm nestjs

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

Nestjs Swagger 4 的循环依赖

当我将@nest/swagger库更新到版本 4 时,发生了此错误:

(node:16134) UnhandledPromiseRejectionWarning: Error: A circular dependency has been detected (property key: "customer"). Please, make sure that each side of a bidirectional relationships are using lazy resolvers ("type: () => ClassType").
    at SchemaObjectFactory.createNotBuiltInTypeReference (/opt/desenvolvimento/Haizen/projectx_back/node_modules/@nestjs/swagger/dist/services/schema-object-factory.js:182:19)
    at SchemaObjectFactory.mergePropertyWithMetadata (/opt/desenvolvimento/Haizen/projectx_back/node_modules/@nestjs/swagger/dist/services/schema-object-factory.js:117:25)
    at /opt/desenvolvimento/Haizen/projectx_back/node_modules/@nestjs/swagger/dist/services/schema-object-factory.js:66:35
    at Array.map (<anonymous>)
    at SchemaObjectFactory.exploreModelSchema (/opt/desenvolvimento/Haizen/projectx_back/node_modules/@nestjs/swagger/dist/services/schema-object-factory.js:65:52)
    at SchemaObjectFactory.createNotBuiltInTypeReference (/opt/desenvolvimento/Haizen/projectx_back/node_modules/@nestjs/swagger/dist/services/schema-object-factory.js:187:37)
    at SchemaObjectFactory.mergePropertyWithMetadata (/opt/desenvolvimento/Haizen/projectx_back/node_modules/@nestjs/swagger/dist/services/schema-object-factory.js:117:25)
    at /opt/desenvolvimento/Haizen/projectx_back/node_modules/@nestjs/swagger/dist/services/schema-object-factory.js:66:35
    at Array.map (<anonymous>)
    at SchemaObjectFactory.exploreModelSchema (/opt/desenvolvimento/Haizen/projectx_back/node_modules/@nestjs/swagger/dist/services/schema-object-factory.js:65:52)
Run Code Online (Sandbox Code Playgroud)

我的模型类似乎是这样的:

@Entity()
export class Job {
.
.
.
    @ManyToOne(type => Customer, customer => customer.jobs)
    @ApiProperty({ type: …
Run Code Online (Sandbox Code Playgroud)

circular-dependency swagger nestjs

12
推荐指数
3
解决办法
3854
查看次数

了解 Nest 中的 Inject、Injectable 和 InjectRepository

我来自非打字稿和非巢背景。我正在检查代码,发现了这段代码片段

import { Inject, Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { AreaService } from '../area/-area.service';
import { Repository } from 'typeorm';
import { Office } from './office.entity';
import { OfficeInterface } from './office.interface';

@Injectable()
export class OfficeService {
  constructor(
    @Inject(AreaService)
    private readonly AreaService: AreaService,
    @InjectRepository(Office)
    private readonly OfficeRepository: Repository<Office>,
  ) {}
Run Code Online (Sandbox Code Playgroud)

老实说,现在这对我来说是压倒性的。我去了Nest JS 页面来了解这一点以及他们所说的

对于来自不同编程语言背景的人来说,可能会意外地发现,在 Nest 中,几乎所有内容都在传入请求之间共享。我们有一个到数据库的连接池、具有全局状态的单例服务等。请记住,Node.js 不遵循请求/响应多线程无状态模型,在该模型中,每个请求都由单独的线程处理。因此,使用单例实例对于我们的应用程序来说是完全安全的

他们在上面的声明中是否意味着他们将所有内容添加到请求对象中nestJS

import { Injectable, Scope } from '@nestjs/common';

@Injectable({ scope: Scope.REQUEST })
export …
Run Code Online (Sandbox Code Playgroud)

typescript nestjs

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

Nest js - 目前循环引用以注入存储库

每次我尝试运行我的项目时,都会收到错误:

CircularDependencyException [错误]:在 @InjectRepository() 内部检测到循环依赖项。请确保双向关系的每一方都用“forwardRef()”修饰。另外,请尝试消除桶文件,因为它们也可能导致意外行为。

我唯一的线索是我的模块之一:

如果我评论这一行:

constructor(
        @InjectRepository(Role) private roleRepo: Repository<Role>
    ){}
Run Code Online (Sandbox Code Playgroud)

并且项目运行,但我在启动项目时注意到日志,出现错误的模块在所有内容之前启动

[Nest] 16872   - 08/04/2020, 7:56:24 PM   [NestFactory] Starting Nest application...
[Nest] 16872   - 08/04/2020, 7:56:24 PM   [InstanceLoader] TypeOrmModule dependencies initialized +91ms
[Nest] 16872   - 08/04/2020, 7:56:25 PM   [InstanceLoader] MyErrorModule dependencies initialized +500ms
[Nest] 16872   - 08/04/2020, 7:56:25 PM   [InstanceLoader] TypeOrmCoreModule dependencies initialized +630ms
[Nest] 16872   - 08/04/2020, 7:56:25 PM   [InstanceLoader] TypeOrmModule dependencies initialized +2ms
[Nest] 16872   - 08/04/2020, 7:56:25 PM   [InstanceLoader] TypeOrmModule dependencies initialized +1ms
[Nest] …
Run Code Online (Sandbox Code Playgroud)

nestjs

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

使用 Nestjs/Angular 初始化 MongoDB 时出错

在付出了很多努力但没有成功之后,我终于来到了这里。我学习 Nestjs/Angular/MongoDB。到目前为止,我成功地同时运行了 Angular 服务器和 Nestjs 服务器。但是当我用它们初始化 mongoDB 时,我得到了大量的错误 147(主要与模式相关)。

错误似乎与我的代码无关,而是安装依赖项。无论如何,我也会在我的代码下复制。我在 ubuntu 和 windows 上都尝试了这个应用程序。但同样的错误仍然存​​在。

app.controller.ts:

import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
 export class AppController {
 constructor(private readonly appService: AppService) {}

@Get()
 healthCheck(): string {
  return this.appService.appStatus();
  }
}
Run Code Online (Sandbox Code Playgroud)

应用模块.ts

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

@Module({
  imports: [ …
Run Code Online (Sandbox Code Playgroud)

mongodb angular nestjs

12
推荐指数
2
解决办法
4784
查看次数

Node 使用 100% CPU 吗?

我对我在运行的节点进程中看到的内容感到有些困惑。docker stats主机上显示容器正在使用超过 100% 的 CPU。这让我认为节点进程正在最大化 CPU。当我top在主机上运行并看到节点进程使用超过 100% 的 CPU时,这一点得到确认。

当我跳入 docker 容器时,我看到该节点仅使用了 54% 的 CPU,并且处理在两个内核之间拆分。因为 Node 是单线程的,所以我期待看到一个内核最大化,另一个内核为 0。

我找到了这个 QA,看起来操作系统可能正在内核之间移动进程(对我来说是新闻)。这个单一的 Node.JS 应用程序使用多核吗?

你能帮我解释一下结果吗?节点是否已达到最大值?或者因为容器中的进程显示 54% 的使用率可以达到 100% 吗?为什么节点容器的顶部显示节点的使用率为 54%,但两个内核的使用率为 45% + 46%。除了单节点进程之外,容器中什么都没有运行。我没有使用集群,尽管我包含的包可能是。

我问这一切是因为我试图了解我是否应该扩展这个 ECS 实例,或者节点是否可以处理更多。

Node.JS: 15.1.0
EC2 Instance: c5.large
NestJS: 7.3.1
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

node.js docker nestjs

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