我无法启用 CORS 来使用最新的 NestJS 8.0.6 和新的 http + ws 项目进行测试。也就是说,我想看到 Access-Control-Allow-Origin服务器响应(以便客户端接受它)。这是我的 main.ts,我尝试了 3 种方法:1)使用选项,2)使用方法,3)使用 app.use。它们都不起作用。
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { microserviceConfig} from "./msKafkaConfig";
async function bootstrap() {
const app = await NestFactory.create(AppModule, { cors: true}); // DOESN'T WORK
app.enableCors(); // DOESN'T WORK
app.connectMicroservice(microserviceConfig);
await app.startAllMicroservices();
// DOESN'T WORK
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,PATCH,OPTIONS,UPGRADE,CONNECT,TRACE');
res.header('Access-Control-Allow-Headers', 'Content-Type, Accept');
next();
});
await app.listen(3000);
}
bootstrap();
Run Code Online (Sandbox Code Playgroud)
请不要给我上一课,告诉我如果我们接受所有域名,CORS (XSForgery) 会有多么危险。关于这一点有足够的材料。我很清楚这一点。这是关于 NestJS …
我在这里创建了一些模块,但遇到了错误
认证模块
import { Module } from "@nestjs/common";
import { AuthService } from "./auth.service";
import { LocalStrategy } from "./local.strategy";
import { JwtStrategy } from "./jwt.strategy";
import { UsersModule } from "../users/users.module";
import { PassportModule } from "@nestjs/passport";
import { JwtModule, JwtService } from "@nestjs/jwt";
import { jwtConstants } from "./constants";
import { ConfigModule, ConfigService } from "@nestjs/config";
@Module({
imports: [
UsersModule,
PassportModule,
JwtModule.register({
secret: jwtConstants.secret,
signOptions: { expiresIn: "1d" },
}),
],
providers: [AuthService, LocalStrategy, JwtStrategy],
exports: [AuthService, LocalStrategy, …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的验证器中运行猫鼬查询
您好,我正在尝试制作一个自定义装饰器,如果该字段的值已存在,它会抛出错误。我正在尝试在验证路线的类中使用猫鼬模型。与解析器/控制器不同,它@InjectModel()在验证器类中不起作用。我的验证器是这样的
import { getModelToken, InjectModel } from "@nestjs/mongoose";
import {
ValidationArguments,
ValidatorConstraint,
ValidatorConstraintInterface,
} from "class-validator";
import { Model } from "mongoose";
import { User } from "../schema/user.schema";
@ValidatorConstraint({ name: "IsUniqueUser", async: true })
export class UniqueValidator implements ValidatorConstraintInterface {
constructor(
@InjectModel(User.name)
private readonly userModel: Model<User>,
) {}
async validate(value: any, args: ValidationArguments) {
const filter = {};
console.log(this.userModel);
console.log(getModelToken(User.name));
filter[args.property] = value;
const count = await this.userModel.count(filter);
return !count;
}
defaultMessage(args: ValidationArguments) {
return "$(value) …Run Code Online (Sandbox Code Playgroud) 我正在使用带有 TypeORM 和 PostgreSQL 的 NestJS 框架。假设我有一个简单的User实体,它只有两个属性:id和name
@Entity()
class User {
@PrimaryGeneratedColumn()
id: string;
@Column({
type: 'varchar'
})
name: string;
Run Code Online (Sandbox Code Playgroud)
问题:
比usersRepository.findOne(id)快吗usersRepository.findOne({ id })?
我认为这usersRepository.findOne(id)会比不在索引中更快usersRepository.findOne({ name }),name不是吗?
我试图排除中间件的一些路由。.exclude选项不起作用。相反,中间件也适用于排除的路由
我想我的代码应该阻止“用户”GET 路由的中间件...但它允许被阻止的路由的中间件。
与 NestJS 一起使用class-validator,我的工作如下:
export class MatchDeclineReason {
@IsString()
@IsEnum(MatchDeclineReasonType)
@ApiProperty()
type: MatchDeclineReasonType;
@ValidateIf(reason => reason.type === MatchDeclineReasonType.Other)
@IsString()
@ApiProperty()
freeText: string;
}
Run Code Online (Sandbox Code Playgroud)
所以如果delinceReason.type === Other,我希望得到一个freeText字符串值。
但是,如果 与declineReason.type有任何不同Other,我希望该freeText财产被剥夺。
有没有什么方法可以在不编写 的情况下实现这种行为CustomValidator?
我的ValidationPipe配置:
app.useGlobalPipes(
new ValidationPipe({
disableErrorMessages: false,
whitelist: true,
transform: true,
}),
);
Run Code Online (Sandbox Code Playgroud) 我正在使用NestJS,我需要知道客户端何时强制断开连接或取消连接。(要么是错误的,要么是因为他们想要)。
例如,在 Express 中,它很简单:
const express = require('express')
const app = express()
const port = 3000
app.get('/', (expressRequest, expressResponse) => {
// Detecting close event
expressRequest.on('close', function() {
console.log('Client connection closed....!');
});
// Detecting end event
expressRequest.on('end', function() {
console.log('Client connection end....!');
});
expressResponse.send('Hello World!')
})
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
})
Run Code Online (Sandbox Code Playgroud)
问题是:使用 NestJS,正确的方法是什么?
我想添加 api 块的描述。
我努力了:
@ApiOperation({
description: 'Operation description'
})
Run Code Online (Sandbox Code Playgroud)
这不起作用。
再会!
\n我正在尝试实施2 microservices that communicate with each other through a message broker.But one of them should accept Http requests via REST-Api。不幸的是,我不明白如何让微服务同时监听消息队列和传入的 HTTP 请求。也许我不了解通过消息代理进行通信的范式中的某些内容,但是如何接收来自客户端的请求并将其转发到微服务架构呢?
主.ts
\nimport { NestFactory } from \'@nestjs/core\';\nimport { AppModule } from \'./app.module\';\nimport {Transport, MicroserviceOptions} from \'@nestjs/microservices\'\n\nasync function bootstrap() {\n const app = await NestFactory.createMicroservice<MicroserviceOptions>(AppModule, {\n transport: Transport.RMQ,\n options: {\n urls: [\'amqp://rabbitmq:5672\'],\n queue: \'hello_world\',\n queueOptions: {\n durable: false\n },\n },\n });\n await app.listen();\n}\nbootstrap();\nRun Code Online (Sandbox Code Playgroud)\n正如您所看到的,现在应用程序没有像标准方法那样侦听端口 3000。应该做什么?
\n各位,我一直在尝试使用 Angular 与 Angular Universal 和 NestJs 来实现一个应用程序。我相信,不仅可以为 SSR 抢占 Nest 服务器,还可以提供 API 端点。
我已经使用https://github.com/nestjs/ng-universal进行了推荐的设置ng add @nestjs/ng-universal,相当标准。之后,我将代码添加到 Angular src 文件夹中并安装了所需的依赖项。
问题是,当我尝试将模块导入嵌套 app.module 时,出现以下错误:
Error: Module not found: Error: Can't resolve 'class-transformer/storage'
我尝试过使用webpack,但是由于我对webpack的了解很少,所以结果一次次失败,正如预期的那样。
首先,是否可以抢占服务器来提供端点?其次,我应该如何解决这个模块?
请在下面找到用于重现问题的存储库:
https://github.com/vitordhers/universal-nest
提前致谢
nestjs ×10
javascript ×3
node.js ×3
typescript ×3
express ×2
angular ×1
jwt ×1
mongoose ×1
postgresql ×1
rabbitmq ×1
swagger ×1
typeorm ×1
validation ×1
websocket ×1