当查询为空时,有没有办法使用默认值?
如果我有以下 DTO 查询:
export class MyQuery {
readonly myQueryItem: string;
}
Run Code Online (Sandbox Code Playgroud)
我的请求不包含查询,那么myQuery.myQueryItem 将是未定义的。我如何使它具有默认值?
我正在使用 TypeORM 从 Rails 迁移到 NestJs。由于历史原因,Rails 中的表名和列名都是蛇形的——我不想把这个麻烦复制到我们的 NestJs/React 端
我可以在 NestJS (typeorm) 中创建名为 firstName 的实体字段,但映射到我的数据库中名为 first_name 的列吗?
我的桌子
+-------------+--------------+----------------------------+
| system_users |
+-------------+--------------+----------------------------+
| id | int(11) | PRIMARY KEY AUTO_INCREMENT |
| first_name | varchar(100) | |
| last_name | varcahr(100) | |
+-------------+--------------+----------------------------+
Run Code Online (Sandbox Code Playgroud)
我的用户实体类
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity({ name: 'system_users' })
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column({ length: 255 })
first_name: string; <-- I WANT THIS TO BE firstName (camelCased)
@Column({ …Run Code Online (Sandbox Code Playgroud) 我想在 NestJS e2e(集成)测试中模拟 JWT 身份验证。我在我的业务逻辑中使用注入的令牌数据,并且我不想在我的测试代码中插入凭据。
我按照Nest authentication docs实现了 JWT 身份验证。我使用@User与示例中的装饰器类似的装饰器,并在我的业务逻辑中使用有关用户对象的信息。
@Post()
async myPostEndpoint(@Body() body: PostBody, @User() user: MyUser){
// do stuff using user properties
}
Run Code Online (Sandbox Code Playgroud)
当按照Nest 测试文档中的指示使用 supertest 测试我的应用程序时,我不想发出真正的身份验证请求,因为我需要在我的版本控制系统中保留凭据。
我希望能够覆盖提供者以返回测试用户。却想不通。
我尝试覆盖AuthService'svalidateClient并login使用Nest 测试文档overrideProvider + useClass/useFactory/useValue中的指示返回默认用户。我还尝试覆盖and 中的方法,但请求仍然返回 401 - Unauthorized。JwtStrategyLocalStrategy
我正在学习 NestJS,这是我的简单服务:
import { Injectable } from '@nestjs/common';
const userMock = [{ account: 'dung', password: '12345678' }];
@Injectable()
export class UserService {
getUser() {
return userMock
}
}
Run Code Online (Sandbox Code Playgroud)
我不太了解@InjectableNestJS。一些教程告诉@Injectable我们@Controller知道这是一个安装并且可以将其用作依赖项注入。但当我删除它时,它仍然有效。
请举例说明有@Injectable和没有的区别@Injectable
我最近必须考虑一个新软件的部署方法,该软件是用以下代码编写的:
该软件将部署在160多台服务器上,分布在欧洲各地,其中一些服务器的互联网连接非常糟糕。
我做了一些研究,很多人明确建议 反对捆绑。主要论点是,原生扩展将因像webpack或 这样的捆绑器而失败rollup(剧透:这是真的,但有一个解决方案)。在我看来,这很大程度上是因为人们不关心这一点:作者对这个用例node-pre-gyp使用了几乎相同的词语。因此,通常情况下,我被告知要使用yarn install或同步node_modules/文件夹。
该项目是新的,但node_modules/文件夹已经超过 480 MB。使用 XZ 进行最大压缩后,我得到了 20 MB 的存档。这对我来说仍然太大了,而且似乎是对资源的巨大浪费。
我还看了以下问答:
node_modules/开箱即用。IgnorePlugins显得太过分了。TypeORM 还有一些单独的问答,但所有这些似乎都需要安装ts-nodeor typescript …
我将 Nestjs 与 prisma 和 swagger 一起使用。当我使用
import {PrismaGeneratedType} from '@prisma/client';
...
@ApiOkResponse({type: PrismaGeneratedType})
Run Code Online (Sandbox Code Playgroud)
在控制器中如果给出错误:
'PrismaGeneratedType' only refers to a type, but is being used as a value here
Run Code Online (Sandbox Code Playgroud)
因为 prisma 生成types而不是类定义。如何使用 Prisma 生成的客户端(类型)与 swagger 一起使用?
这是我启动 Nest 服务器时遇到的问题:
back-end/node_modules/@nestjs/common/decorators/core/optional.decorator.js:22
const args = Reflect.getMetadata(constants_1.OPTIONAL_DEPS_METADATA, target) || [];
^
TypeError: Reflect.getMetadata is not a function
at /Users/lucabento-versace/OneDrive-Ynov/Projets/3eme_annee/WEB/TrueEat/back-end/node_modules/@nestjs/common/decorators/core/optional.decorator.js:22:34
at /Users/lucabento-versace/OneDrive-Ynov/Projets/3eme_annee/WEB/TrueEat/back-end/node_modules/@nestjs/common/node_modules/tslib/tslib.js:104:41
at Object.__decorate (/Users/lucabento-versace/OneDrive-Ynov/Projets/3eme_annee/WEB/TrueEat/back-
end/node_modules/@nestjs/common/node_modules/tslib/tslib.js:99:99)
at Object.<anonymous> (/Users/lucabento-versace/OneDrive-Ynov/Projets/3eme_annee/WEB/TrueEat/back-end/node_modules/@nestjs/common/services/console-logger.service.js:204:43)
at Module._compile (internal/modules/cjs/loader.js:1085:14)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
at Module.load (internal/modules/cjs/loader.js:950:32)
at Function.Module._load (internal/modules/cjs/loader.js:790:12)
at Module.require (internal/modules/cjs/loader.js:974:19)
at require (internal/modules/cjs/helpers.js:93:18)
Run Code Online (Sandbox Code Playgroud)
我对此进行了徒劳的测试:npm i reflect-metadata
我已经查看了有关相同错误的问题,但我找不到任何解决方案
我在基于 Nest.js 的项目中导入 ESM 模块时遇到问题。据我了解,这个问题不仅与 Nest.js 有关,也与 Typescript 相关。
我尝试了 Node.js 和 typescript 版本的各种操作和组合,添加"type":"module"到文件package.json的设置并进行更改,因此它具有以下视图,与默认值tsconfig.json相去甚远:
{
"compilerOptions": {
"lib": ["ES2020"],
"esModuleInterop": true,
"module": "NodeNext",
"declaration": true,
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true,
"moduleResolution": "Node",
"target": "esnext",
"sourceMap": true,
"outDir": "./dist",
"baseUrl": "./",
"incremental": true,
"skipLibCheck": true,
"strictNullChecks": false,
"noImplicitAny": false,
"strictBindCallApply": false,
"forceConsistentCasingInFileNames": false,
"noFallthroughCasesInSwitch": false,
}
}
Run Code Online (Sandbox Code Playgroud)
我的完整环境是:
我正在尝试AuthGuard按照文档使用装饰器和通行证 JWT 策略。
文档中的所有内容都很好用。但是我现在想保护具有包含在 JWT 中的范围的路由。所以这是我的应用程序生成的基本 jwt 负载:
{
"user": {
"id": "20189c4f-1183-4216-8b48-333ddb825de8",
"username": "user.test@gmail.com"
},
"scope": [
"manage_server"
],
"iat": 1534766258,
"exp": 1534771258,
"iss": "15f2463d-8810-44f9-a908-801872ded159",
"sub": "20189c4f-1183-4216-8b48-333ddb825de8",
"jti": "078047bc-fc1f-4c35-8abe-72834f7bcc44"
}
Run Code Online (Sandbox Code Playgroud)
这是AuthGuard装饰器保护的基本受保护路由:
@Get('protected')
@UseGuards(AuthGuard('jwt'))
async protected(): Promise<string> {
return 'Hello Protected World';
}
Run Code Online (Sandbox Code Playgroud)
我想添加选项并将该路由的访问权限限制为具有manager_serverJWT 范围的人员。所以在阅读了一些AuthGuard代码之后,我认为我可以写出类似的东西:
@Get('protected')
@UseGuards(AuthGuard('jwt', {
scope: 'manage_server'
}))
async protected(): Promise<string> {
return 'Hello Protected World';
}
Run Code Online (Sandbox Code Playgroud)
但是,我在文档中看不到可以使用此选项的地方。
我认为向 the 的validate函数添加一个选项参数JWTStrategy可以解决问题,但事实并非如此。这是我的validate函数(包含在 …
节点版本: v10.13.0
我正在尝试对NodeJS请求并发性进行非常简单的测试,包括繁重的CPU计算.我理解NodeJS不是CPU绑定进程的最佳工具,并且不应系统地生成子进程,但此代码是为了测试子进程的工作原理.这也是使用NestJS用TypeScript编写的.
SRC/app.controller.ts
import { Get, Param, Controller } from '@nestjs/common';
import fork = require('child_process');
@Controller()
export class AppController {
@Get()
async root(): Promise<string> {
let promise = new Promise<string>(
(resolve, reject) => {
// spawn new child process
const process = fork.fork('./src/cpu-intensive.ts');
process.on('message', (message) => {
// when process finished, resolve
resolve( message.result);
});
process.send({});
}
);
return await promise;
}
}
Run Code Online (Sandbox Code Playgroud)
SRC/CPU-intensive.ts
process.on('message', async (message) => {
// simulates a 10s-long process
let now = …Run Code Online (Sandbox Code Playgroud) nestjs ×10
node.js ×5
typescript ×5
javascript ×3
typeorm ×2
es6-modules ×1
httpserver ×1
mocking ×1
prisma ×1
swagger ×1
unit-testing ×1