我想提供/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) 我的.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 中可靠地访问文件中的环境变量?
NestJS 使用默认记录器实现。它将输出发送到控制台。
我可以知道,如何配置默认记录器以将输出发送到文件、数据库。
此外,
如果我想在 NestJS 中使用 Winston,如何使用/注入/扩展各种传输选项。
它不应该与 NestJS 紧密耦合,并且始终能够替换为其他一些记录器。
我想开始使用 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) 我对这些关系有点困惑,因为我习惯通过 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)
我很困惑,请帮忙^_^
当我将@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) 我来自非打字稿和非巢背景。我正在检查代码,发现了这段代码片段
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) 每次我尝试运行我的项目时,都会收到错误:
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/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) 我对我在运行的节点进程中看到的内容感到有些困惑。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)
nestjs ×10
node.js ×4
typescript ×3
javascript ×2
angular ×1
docker ×1
dotenv ×1
express ×1
logging ×1
mongodb ×1
static-files ×1
swagger ×1
typeorm ×1
winston ×1