我被要求在nestjs上使用Ngxs。据我所知,Ngxs是专门为Angular编写的,nestjs在应用程序结构方面与Angular非常相似。希望有人能在这两方面提供帮助
如何在nestjs中适应ngxs,或者
任何有用的资料,我可以用来写一些适配器来做它,或
谁/如何让某人为我做这件事
这毫无意义
如果您想在nextjs中使用redux,请使用一些redux方法
例如:
实际上,将NGX移植到nest是没有意义的。你为什么要这么做?我认为这在制作(小型)游戏时是有意义的。如果持久性不是一个问题
假设存在不同的实体用户、角色、任务
所有这些实体都有共同的createdBy,updatedBy,createdOn,updatedOn
我想知道如何创建一个基本实体,以便所有实体都使用Typeform扩展nest js中的基类。这是应该使用继承的地方。
基本上,这个想法是要有一个基类/实体来收集公共逻辑或结构,其中许多其他类/实体共享该公共逻辑
例如:
猫、狗、大象都有相似的特征,所以我们可能希望在一个地方收集所有这些相似的特征,以避免逻辑和代码的重复
让我们看一个最简单的例子,只是为了基本的
在NestJSAPI上,我想使用一个模块服务到一个实体中,用非数据库属性填充这个实体
在我的例子中,我想获得我正在检索的类别的文章数量
@实体({name:'categories})
出口类别{
构造函数(私有只读服务:分类服务){}
@PrimaryGeneratedColumn()
id:编号;
@第()列
@索引({unique:true})
标题:字符串;
@OneToMany(()=>Article,articles=>articles.category)
条款:第[]条;
数量练习:
我想构建一个自定义验证器,它的工作方式类似于,接受一个值数组,它是可以使用的字段长度。我希望能够通过允许长度的数组进行检查。虽然我已经研究了类验证器上的IsIn代码,但我不确定如何将其转换为NestJS
我试图验证长度可能为12或32位的数据(旧系统、新系统),但不验证其他长度的数据,因此当前的@length()是不够的
我需要能够创建一个@LengthIn()样式的验证器,在这里我可以使用decorator中的大小
@IsString@LengthIn([12,32])公共只读包成员:stri
标签: Nestjs
nestjs-exception-filters
我是NestJs新手,我创建了一个回退异常过滤器,现在我想知道如何使用它。换句话说,如何在应用程序中导入它
以下是我的回退异常筛选器:
@Catch(HttpException)
导出类HttpExceptionFilter实现ExceptionFilter{
公共捕获(异常:HttpException,主机:ArgumentsHost):任意{
/*这里有一些代码*/
返回response.status(statusCode.json)({
状态:状态代码,
日期时间:新日期(),
creat
我是nestjs新手,我想更新数据库中的数据,但当我运行PUT进行更新时没有错误,但我得到了以前的数据,我如何更新数据并将更新后的数据存储在数据库中
控制器
@Put(':id')
update(@Param('id') id, @Body() CreateDeliveryDto: CreateDeliveryDto) {
return `This action updates a #${id}`;
}
服务
async updat
NestJS是否支持gRPC中间件?下面是示例项目,然后是用于记录请求入口点的中间件
在示例项目中,似乎有一个Express服务器和gRPC服务器。我只使用gRPC服务器
const app = await NestFactory.createMicroservice<MicroserviceOptions>(...);
await app.listenAsync();
但是没有日志记录。中间件是HTTP处理程序独有的。如果您需要类似中间件的功能,最好使用Nest的增强器(、或)。
我正在测试我的控制器,但我有一个问题,以模拟该控制器的警卫。我的应用程序是用NestJs版本6.13.1开发的
我可以超越一个守卫来模拟它,正如下面的剪断:
const fakeGuard: CanActivate = { canActivate: () => true };
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
impo
简而言之:我有一个名为Section的实体,它应该包含一个名为Subsection的字段。每个小节可以有多个小节,一个小节只能属于一个小节。我们这里有很多人。该类看起来像这样(我只复制了几个字段):
但是我需要添加另一个类型为SectionEntity的字段subsections。所以在这种情况下,它看起来像一个递归类型
我如何做到这一点,以及什么样的关系(装饰器)会是什么样子?我假设这实际上是一个来自装饰实体的Typeorm问题。Typeorm中有对它的支持,您可以找到一个很好的例子。
在这种
我有一个问题
是否可以在路由上使用多个身份验证保护(在我的示例中是basic和ldap身份验证)。
当一个防护成功时,应对路由进行身份验证。简短回答:否,如果向路由添加多个防护,则它们都需要通过才能激活路由
详细回答:不过,通过使LDAP保护扩展基本保护,您试图实现的目标是可能的。如果LDAP特定逻辑成功,则返回true,否则返回调用super.canActivate()的结果。然后,在控制器中,向路由添加基本或LDAP保护,但不能同时添加两者
basic.guard.ts
导出基本Guard实
我正在尝试使用PassportJs为Atlassian堆栈(竹子)设置NestJs
不幸的是,文档只解释了如何使用本地身份验证来实现这一点
我阅读了文档,并且PassportJs for Nestjs应该提供我使用的策略,但是我在Nestjs中得到了“OAuth身份验证需要会话支持”错误
所以我尝试在auth.module.ts中配置它
从'@nestjs/common'导入{HttpModule,Module};
从“../Controller/auth.Controller”导入{AuthC
我需要关于如何正确或最有效地在数据库中保存用户日志的建议
async create(createUserDto: CreateUserDto): Promise<User> {
try {
const user = new User();
user.email = createUserDto.email;
user.role = createUserDto.role;
user.firstName = createUserDto.firstName;
user.l
我在文档中发现的内容描述了必须创建Prisma服务
import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
@Injectable()
export class PrismaService
extends PrismaClient
implements OnModuleInit, OnModuleD
我创造了一个传奇故事来对一个特定事件做出反应。在这种情况下,需要发出多个命令
我的传奇故事是这样的:
@Injectable()
export class SomeSagas {
public constructor() {}
onSomeEvent(events$: EventObservable<any>): Observable<ICommand> {
return events$.ofType(SomeEvent).pipe(
我想为请求范围的资源创建一个自定义提供程序,结合以下样式:
我不确定这是否可能,或者如果可能的话,自定义提供程序的正确标记是什么。事实上,您可以通过沿工厂传递scope属性来实现这一点
这是指向接口的链接
是的,还必须在inject属性数组中包含请求符号。如果您想访问请求,请执行以下操作:)
请告诉我如何解决上面的错误。这让我很头疼,因为一切看起来都很好。任何帮助都将不胜感激。下面是我的存储库类、dto类和日志的代码片段
问题是标题没有值(空),实际上,看起来整个dto都是空的,因为标题是它首先检查的标题。
这里有一些解决方案
如果您使用postman发布dto值,请尝试使用json
表单2-检查是否在方法处理程序中的dto之前pot@Body()
控制器示例:someMethod(@Body()notifsDto:notifsDto){}
在“标题”上方添加@IsString(
所以我正在从我的mongoose数据库中读取大量数据,并将它们写入SheetJS的XLSX中。我想从我的控制器返回一个可下载的文件。我在下面得到了一个对象,问题是我怎样才能返回这个对象进行下载
const wbout=XLSX.write(wb,{bookType:'XLSX',type:'buffer'});
我是用下面的代码完成的。Header提示文件下载,type设置文件的正确类型,您可以使用res.send()发送文件。
res.header('Content-disposition',
标签: Nestjs
nodemonvscode-debugger
我将Visual Studio代码与nestjs和nodemon一起使用,我有以下配置:
package.json
“start:dev”:“nodemon--config nodemon.json”,
“start:debug”:“nodemon--config nodemon debug.json”,
nodemon.json
{
“手表”:[“src”],
“外部”:“ts,gql”,
“忽略”:[“src/***/.spec.ts”,“src/测试/*”],
“环境”:{}
}
no
我想验证NestJs中的响应,以便它们能够严格格式化
例如,当从数据库获取用户时,密码字段不应位于响应对象中。
我可以在发送用户之前删除用户中的密码属性,但我想知道是否有任何方法可以验证响应对象,并在发送到客户端之前对其进行转换
在这种情况下,转换意味着通过使用DTO之类的东西自动删除任何额外的属性(如密码),并且/听起来像是要使用Nest的属性。只要您从控制器返回的对象是一个用class transformerdecorators修饰的类实例,拦截器就会在其上运行classToPlain(),
我有在课堂上处理日期的功能
export class DateName {
weekDaysList() {...}
}
我是否需要创建一个包含日期服务的模块?
根据我的经验,服务应该包含在控制器和持久层之间进行通信的方法
在这种情况下,日期函数应该位于helper或utility文件夹中。根据我的经验,服务应该包含在控制器和持久层之间进行通信的方法
在这种情况下,日期函数应该位于helper或utility文件夹中
我刚刚创建了一个新的Nestjs应用程序,并添加了一个角度项目
即时通讯使用:
use(req: Request, res: Response, next: Function) {
console.log("Hit the request");
res.sendFile(resolve('../frontend/dist/frontend/index.html'));
}
发送文件很好。浏览器将接收index.html
我得到
我正在玩NestJS,我想把TypeORM抛出的错误转换成我可以控制的形状
现在,我正试图捕获从TypeORM抛出的错误,并将其注销,以查看我的自定义筛选器是否正常工作。但不幸的是,过滤器中的console.log语句从未记录
这是我的服务和过滤器的精简版
user.service.ts
导出类用户服务{
建造师(
@注入存储库(用户)
私有只读用户存储库:存储库,
) {}
@UseFilters(新类型ormFilter())
异步创建(createUserDto:createUserDto
我有一对多的关系:
class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@OneToMany(() => Phone, phone => phone.user, {cascade: true})
phones?: Phone[];
}
假设数据库中的当前数据如下:用户有两个电话号码:
{
"id": 1,
"name": "J
我编写了GqlAuthGuard模块,但当JWT过期或非法时,它总是抛出UnauthorizedException。这将导致stacktrace中出现错误
我想抛出AuthenticationError(来自apollo server express)
我怎么做
从'@nestjs/common'导入{Injectable,ExecutionContext}
从'@nestjs/passport'导入{AuthGuard}
从'@nestjs/graphql'导入{GqlExecutionCo
我有一个包含角色名称及其优先级的角色表
id role_name priority
1 SuperAdmin 1
2 User 2
... so on
条件是,每当用户对任何实体执行任何创建或更新操作时,它都必须遵循层次结构,如SuperAdmin可以创建用户,但用户不能创建SuperAdmin
我已经创建了一个函数checkHierarchy,并在需要的地方将其导入到不同的模块中,并像这样显式地检查它
this.checkHierarchy(
我已经创建了一个拦截器,如下所示,我希望在全球范围内使用。我在我的模块中添加了拦截器,并对其进行了设置,以便nest js可以根据为我处理DI,但是当我向我的服务发出请求时,我收到一个错误,指示无法读取未定义的的属性日志,因此看起来NestJS没有处理DI
拦截器代码:
import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable }
嗨
我们有一个可以通过HTTP和gRPC访问的NestJS应用程序(使用自定义RPC策略)
虽然它们不共享相同的路由,但它们确实共享一些代码。例如,从数据库中查找资源的服务。我们最初遵循并使用异常过滤器来管理HTTP响应状态代码。这意味着当找不到资源时,服务会抛出NotFoundException的实例
然而,现在我们正在尝试与RPC异常处理程序集成,我们发现任何类型的异常如果不是RpcException的实例,都会被RPC微服务视为内部服务器错误,包括HttpException
在查看文档和源
我正在尝试为Nestjs TypeORM设置迁移,在我的TypeOrmModule.forRoot中,我已经为迁移添加了所需的文件夹,但它一直将迁移添加到根文件夹
TypeOrmModule.forRoot({
type: 'mssql',
host: 'test',
port: 1,
username: 'test',
password: 'test',
database: 'test',
entities: [__dirname + '/**/entities/*
标签: Nestjs
typeormtypeorm-activerecord
我读过关于打字交易的书
@Transaction()
save(user: User, @TransactionRepository(User) userRepository: Repository<User>) {
return userRepository.save(user);
}
我不知道如何实现它。如果我错了,请纠正我,一个可能的解决方案是将模块服务依赖项(module1service dependency=>module1repository)更改为新的
我在NestJS中有一个使用Fastify的应用程序。我想在我的回复中将内容类型设置为application/hal+json。我在NestJS拦截器中有以下代码:
@Injectable()
导出类SampleInterceptor实现了NestInterceptor{
截取(context:ExecutionContext,next:CallHandler):在fastify中可观察到从不运行,也从不将负载序列化为字符串
是一个便于您复制问题的存储库
有什么方法可以解决这个问题吗?据我所知,
我觉得和的组合是我需要实现的,我很难将它们组合在一起
我有一个DTO,它包含一个enum
// create-order.dto.ts
import { IsEmail, IsNotEmpty, IsEnum } from 'class-validator';
import { PurchasableType } from '../enum/purchaseable-type.enum';
export class CreateOrderDto {
...
@IsNotE
根据,我们可以在测试模块中使用提供者来提供repo的模拟版本。我最终得到了以下测试代码:
describe('UserController', () => {
let userController: UserController
beforeEach(async () => {
const app: TestingModule = await Test.createTestingModule({
controllers: [UserController]
我使用NestJS框架和typeorm。使用数据库时,所有数据都会成功保存。连接没有问题。我尝试用Jest配置e2e测试。不幸的是,我有两个错误:
及
找不到“用户”的存储库。看起来此实体未在当前“默认”连接中注册
我试着用这个来设置testenv
我的文件:
应用e2e-spec.ts
import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
标签: Nestjs
auth-guardnestjs-passportnestjs-jwt
我有一个使用jwt实现身份验证的NestJS(版本6)项目。以下配置工作正常:
package.json
...
“@nest-modules/mailer”: “^1.1.3",
“@nestjs/common”: “^6.6.7",
“@nestjs/core”: “^6.6.7",
“@nestjs/jwt”: “^6.1.1",
“@nestjs/passport”: “^6.1.0",
“@nestjs/platform-expres
我刚刚完成了与nest js框架的大摇大摆的集成。这真是太棒了,但看起来我的代码和招摇过市的特定代码集成在一起了,所以即使在产品编译代码中,它也会出现。我不喜欢将特定于文档的代码转移到生产代码中,我也在考虑这是否会影响性能。有没有一种方法可以将这些东西解耦
@j_steenkamp_twitter回应说:我不认为招摇过市会有很大的影响,会影响你的应用程序性能。其次,将您的招摇过市文档投入生产将促使您花费额外的时间来确保应用程序的安全
我尝试在运行@NestJS/platform fastfy集成的NestJS应用程序上同时运行两台服务器(具体来说,我尝试运行同一应用程序的一台HTTP和一台HTTPS服务器)
NestJS文档包括用于express集成的多个服务器,但没有提到如何使用fastify()实现这一点。有人知道正确的实现方法吗?编辑11/20/19
看来我原来的答案是不正确的。我在很大程度上只是离开了文档,试图把一些东西拼凑在一起,忘记了Fastify的服务器实例与Express的不同,因为它与内置的http(s)模
有没有办法向NestJS管道添加额外的元数据
元数据属性具有以下值:
export interface ArgumentMetadata {
type: 'body' | 'query' | 'param' | 'custom';
metatype?: Type<any>;
data?: string;
}
导出接口元数据{
键入:“body”|“query”|“param”|“custom”;
元类型?:类型我能够通过自定义参数装饰器和自定义管道添加额外的元数据
im
标签: Nestjs
nestjs-swaggernestjs-config
根据这一点,您可以在AppModule中导入配置。
我正在尝试访问main.ts文件中引导级别的配置。
大概是这样的:
const app = await NestFactory.create(AppModule);
if (config.get('swagger.enabled'))
{
initSwagger(app);
}
await app.listen(8080);
@Injectable()
export class SomeService {
co
我正试图从nestjs中的验证管道中访问请求对象
为了验证某些字段的唯一性,我需要随PUT/PATCH请求提供的ID/UUID参数(在数据结构本身中不可用)
有什么想法吗?目前,在管道中根本无法访问请求对象。如果需要请求,可以使用或
如果您正致力于验证唯一性,那么这听起来更像是业务逻辑的一部分,而不仅仅是其他任何东西,因此我将把它放在一个服务中,并在那里处理对数据库的查询。只要我的两分钱
编辑日期:2020年11月17日
在进一步了解框架作为一个整体的工作方式之后,从技术上讲,可以在管道中获取整
我正在尝试使用TypeORM从我的NestJS应用程序创建一个物化视图。
数据库是一个Postgres
很遗憾,视图实体与要求不匹配:
期望的行为:与模型一样,在NestJS项目中定义了一个物化视图,带有“synchronize:true”选项:项目在运行时创建视图,如果它不存在,如果它存在,它只是与它同步(与模型一样)
有什么线索可以帮助我实现这一点吗?我最终做的是将实体定义为ViewEntity,设置{materialized:true}
然而,正如您所指出的,typeorm并不能很好地处理
我正在尝试使用TypeORM向我的NestJS应用程序添加一个人。我声明了一个人实体和一个地址实体,具有一个人对多个地址关系。我可以添加此人及其地址,但当我尝试访问某人(或所有人)时,会出现错误:
TypeError: Cannot read property 'joinColumns' of undefined
我不确定到底发生了什么,因为我从TypeORM文档中了解了如何建立多人和一人的关系。不过,我注意到地址表中有一行,但是personId列仍然是null。您可以看到person.ent
我无法异步连接到mongodb。请让我知道我做错了什么
MongoConfig文件:
import { MongooseModuleOptions } from '@nestjs/mongoose';
export default (): { mongoConfig: MongooseModuleOptions } => ({
mongoConfig: {
uri: process.env.DB_URI,
connectionName: 'learn-nest',
我正在尝试将NestJS与typeorm结合使用。虽然我已经看了一些其他类似的问题,但这似乎是不同的,因为我在一个服务中使用了两个回购协议,我似乎看不出我做错了什么
错误:
Nest can't resolve dependencies of the AuthPhoneService (CredentialsRepository, ?, ConfigService). Please make sure that the argument Repository at index [1] is av
当我的Nest.js应用程序加载时,我需要运行一些数据库操作。(主要围绕数据初始化)。所有这些任务都已生成,并在控制器中作为操作使用。如果我手动转到/api/controller/action,它们就会工作。我需要一种在服务器加载时调用它们的方法。有什么建议吗?NestJS公开了一些可以在服务(或其他地方)中实现的生命周期挂钩。您只需创建一个实现所需生命周期挂钩的服务,并将其注册为AppModule的提供者
例如:
@Injectable()
export class WarmupService
我创建了新的NestJS应用程序,并定义了如下控制器:
@Controller('/risks')
export class RisksController {
constructor(private readonly risksService: RisksService) {}
@Get()
getRisks(
@Headers('companyId') companyId: string): Promise<EmoRisk[]> {
return t
编辑:由于建议使用DTO的评论,找到了解决方案。答案在底部详细列出
NestJS网站提供了使用@ApiBody()时[declare default values][1]的文档,有没有办法使用@ApiQuery()实现这一点?(即,在文档中显示查询具有默认值)
例如,如果我有分页查询,并希望默认为第1页,每页有5个条目:
@Get()
@ApiQuery({name:'page',默认值:1,类型:Number})
@ApiQuery({name:'limit',默认值:5,类型:Number}
我的问题是
NestJS是否处理一些现成的安全实践?。如果没有,除了安全帽,您还可以分享哪些建议来保护NestJS应用程序?(我在NestJS中间件文档中看到,这是一个使用头盔依赖项的示例。)
当使用TypeORM时,是否包含SQL注入
提前感谢。Nest除了下面使用的实际HTTP提供程序(express/fastify)之外,没有其他功能。为了保持灵活性,我们没有决定强迫任何人使用特定的工具。相反,你可以选择你想要的任何东西
就TypeORM而言,据我所知,SQL注入是被阻止的。Nest除
如果值{a:1}来自客户端,我想将其更改为{a:1,b:2}
在这种情况下,Nestjs建议在哪里更改数据
首先。在dto中使用变换装饰器的方法
第二服务
第三,将typeorm与customRepository一起使用。()
在第一种情况下,如果在验证之前需要处理某个值,我认为不应该使用它
当然我知道dto应该只有getter和setter
然而,我担心我是否应该使用转换解码器。你可以这样写
a={a:1}
b={…a,b:2}在哪里?dto?还是servcie或customRepositor
标签: Nestjs
x-www-form-urlencoded
在编码格式方面,我有点新手(从未真正理解过)。目前,我正在使用Postman测试我的许多API端点,并将x-www-form-urlencoded数据发送到端点,并使用@Body()装饰程序解析完整对象。只要我在请求中指定了正确的内容类型头,这就行了。然而,我还没有弄清楚是否可以让NestJS自动将任何有效负载值解析为布尔值。如果我将该值设置为“true”,它将被解析为字符串
我可以将请求作为application/json发送,并传递布尔值(这是可行的)-但我想知道x-www-form-url
我在Mikro Orm中为一个实体创建了一个迁移。之后,我修改了实体并再次运行迁移。现在nestjs一直给我这个错误
[Nest] 13528 - 02/06/2021, 6:59:14 pm [NestFactory] Starting Nest application...
[Nest] 13528 - 02/06/2021, 6:59:14 pm [InstanceLoader] MikroOrmModule dependencies initialized +43ms
1 2 3 4 5 6 ...
下一页 最后一页 共 14 页