根据此文档, 您在 AppModule 中导入您的配置。
我正在尝试访问我的 main.ts 文件中引导程序级别的配置。像这样的东西:
const app = await NestFactory.create(AppModule);
if (config.get('swagger.enabled'))
{
initSwagger(app);
}
await app.listen(8080);
Run Code Online (Sandbox Code Playgroud)
在这一点上我无权访问配置的问题,只有其他模块才能访问这样的配置:
@Injectable()
export class SomeService {
constructor(private readonly httpService: HttpService,
private readonly config: ConfigService) {}
}
Run Code Online (Sandbox Code Playgroud)
我的问题:如何在引导程序级别访问“nestjs-config”
我正在试验NestJS和TypeGraphQL。我有一个猫的示例模型。
import { Document } from 'mongoose';
import { ObjectType, InputType, Field, ID } from 'type-graphql';
export interface Cat extends Document {
readonly name: string;
readonly age?: number;
}
class CatBase {
@Field()
name: string;
@Field({ nullable: true })
age?: number;
}
@ObjectType()
export class CatObjectType extends CatBase implements Cat {
@Field(type => ID)
id: string;
}
@InputType()
export class CatInputType extends CatBase implements Cat {
}
Run Code Online (Sandbox Code Playgroud)
在这里,我试图重用BaseCatinCatObjectType和CatInputType。但我收到此错误:
[ { …Run Code Online (Sandbox Code Playgroud) 我想记录我的 API 的传入请求和传出响应。我创建了一个请求拦截器和一个响应拦截器,如here所述
https://docs.nestjs.com/interceptors
所以请求拦截器只记录请求对象
@Injectable()
export class RequestInterceptor implements NestInterceptor {
private readonly logger: Logger = new Logger(RequestInterceptor.name, true);
public intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
const { originalUrl, method, params, query, body } = context.switchToHttp().getRequest();
this.logger.debug({ originalUrl, method, params, query, body }, this.intercept.name);
return next.handle();
}
}
Run Code Online (Sandbox Code Playgroud)
并且响应拦截器等待传出响应并稍后记录状态代码和响应对象
@Injectable()
export class ResponseInterceptor implements NestInterceptor {
private readonly logger: Logger = new Logger(ResponseInterceptor.name, true);
public intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
const { statusCode } = context.switchToHttp().getResponse();
return next.handle().pipe( …Run Code Online (Sandbox Code Playgroud) 我有最基本的管道,我想在自定义提供程序的方法上使用它。管道如下所示:
@Injectable()
export class DateTransformPipe implements PipeTransform {
transform(value: any, metadata: ArgumentMetadata) {
console.log('Inside the DateTransformPipe pipe...');
return value;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我想使用它的类:
@Injectable()
export class MyProvider {
@UsePipes(new DateTransformPipe())
private getDataFor(onDate: Date): string {
console.log(onDate);
return 'Some Stuff'
}
}
Run Code Online (Sandbox Code Playgroud)
管道位于一个特殊的目录中src/helpers/pipes。这里的问题是根本没有调用管道的变换方法......我似乎不明白为什么。
我有一个看起来像这样的 DTO:
class PersonDto {
readonly name: string;
readonly birthDate: Date;
}
Run Code Online (Sandbox Code Playgroud)
我的 NestJs 控制器方法如下所示:
@Post
create(@Body() person: PersonDto) {
console.log("New person with the following data:", person);
// more logic here
}
Run Code Online (Sandbox Code Playgroud)
发布的 JSON 数据具有birthDate字符串形式:"2020-01-15". 如何将此字符串转换为 JavaScriptDate对象?我想添加@IsDate类验证,PersonDto但目前会失败。
我正在尝试在我的嵌套应用程序中实施 JWT 策略进行身份验证。
我收到以下错误
未知的身份验证策略“jwt”
这是我的代码:
jwt.strategy.ts
import { Injectable } from "@nestjs/common";
import { PassportStrategy } from "@nestjs/passport";
import { Strategy } from "passport-local";
import { ExtractJwt } from "passport-jwt";
import { jwtConstants } from "./constants";
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor() {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
ignoreExpiration: false,
secretOrKey: jwtConstants.secret,
})
}
async validate(payload: any) {
console.log(payload);
return { userId: payload.sub, username: payload.username };
}
}
Run Code Online (Sandbox Code Playgroud)
我的认证模块:
authentication.module.ts
import { Module } from '@nestjs/common';
import { AuthenticationService …Run Code Online (Sandbox Code Playgroud) 我在 nest 中有一个全局记录器模块,它记录到云日志服务。我正在尝试创建一个添加日志记录功能的类方法装饰器。但是我正在努力如何在装饰器中注入全局嵌套模块的服务,因为我在文档中找到的所有依赖注入机制依赖都是基于类或类属性的注入。
export function logDecorator() {
// I would like to inject a LoggerService that is a provider of a global logger module
let logger = ???
return (target: any, propertyKey: string, propertyDescriptor: PropertyDescriptor) => {
//get original method
const originalMethod = propertyDescriptor.value;
//redefine descriptor value within own function block
propertyDescriptor.value = function(...args: any[]) {
logger.log(`${propertyKey} method called with args.`);
//attach original method implementation
const result = originalMethod.apply(this, args);
//log result of method
logger.log(`${propertyKey} method return value`);
};
}; …Run Code Online (Sandbox Code Playgroud) 我正在设置一个新的 NestJS 应用程序,我刚刚添加了 class-validator 以验证控制器输入,但它似乎被完全忽略了。这是 DTO:
import {IsString} from 'class-validator';
export class CreateCompanyDto {
@IsString()
name: string | undefined;
}
Run Code Online (Sandbox Code Playgroud)
这是控制器:
import {
Body,
Controller,
InternalServerErrorException,
Post,
Request,
UseGuards, ValidationPipe
} from '@nestjs/common';
import * as admin from 'firebase-admin';
import {User} from 'firebase';
import {AuthGuard} from '../auth/auth.guard';
import {CurrentUser} from '../auth/current-user.decorator';
import {CreateCompanyDto} from './dto/create-company.dto';
@Controller('vendor')
export class VendorController {
@Post()
@UseGuards(AuthGuard)
async create(@CurrentUser() user: User, @Request() req: any, @Body(new ValidationPipe({ transform: true })) company: CreateCompanyDto) {
console.log(JSON.stringify(company));
throw new …Run Code Online (Sandbox Code Playgroud) 所以我有这些实体:
Group {
id: number;
name: string;
persons: Person[];
}
Person {
name: string;
items: Item[];
}
Item {
name: string;
active: boolean;
}
Run Code Online (Sandbox Code Playgroud)
我有什么:一组组id 的groupIds.
我的目标:获得一个数组,Item但只有一个包含在group.id我拥有的组数组内的组中并且具有属性的数组active true。
我试图构建一个这样的查询构建器:
this.groupRepository.createQueryBuilder('group')
.innerJoin('group.persons', 'persons')
.innerJoinAndSelect('persons.items', 'items')
.where({'items.active': true, 'group.id': In(groupIds)})
.getMany();
Run Code Online (Sandbox Code Playgroud)
但我只得到一组group(没有任何关系)其中有效item的。
如果这甚至可以通过单个查询实现,我需要更改什么?
截至今天,TypeOrm 每周下载量超过 282.102 次,有 1.493 个问题,Github 每周下载量超过 571.781 次,Sequelize 783 个问题。
当我阅读 TypeOrm 和 Sequelize Github 问题时,我想通过编写原始 SQL 而不是处理诸如丢失数据、同步实体或由于默认 ORM 类型而更改的类型时丢失列等主要问题来避免这些主要问题。
我将 NestJs 7.0.3 与 TypeGraphQL、PostgreSQL v12.2 和 TypeScript 一起使用。自 2019 年以来,我在 TypeOrm 上提出了两个问题。
我了解使用 ORM 的优点,但我想知道如果我使用原始 SQL 来完全替换 TypeORM 或 Sequelize,NestJS 是否可以有效地工作?
非常感谢您的见解。罗恩
nestjs ×10
sql ×2
typeorm ×2
typescript ×2
date ×1
graphql ×1
javascript ×1
jestjs ×1
json ×1
jwt ×1
nestjs-jwt ×1
node.js ×1
orm ×1
sequelize.js ×1
typegraphql ×1