我目前正在开发一个使用 Angular/NestJS 的项目。我们已经使用 ngx-translate 在 Angular 中实现了 i18n,这很棒,我想知道在 NestJS 中实现 i18n 的最佳方法是什么。我发现了一个类似的问题,但这里唯一的答案是使用i18-node,然后围绕它实现自定义装饰器、包装器等,以将其与 Nest 一起使用。
我想知道在 NestJS 中是否有一些“固执己见”的方法来实现 i18?另外,如果“最佳”方法是使用 i18-node,我应该构建什么装饰器/包装器?
我有一条路线,在public目录中创建一个新文件夹,该文件夹是由app.useStaticAssets提供的静态内容。
问题是,即使我在tsconfig.build.json和tsconfig.json的排除数组中添加了公共目录,当在公共目录中删除或创建新文件夹时,我的服务器仍然会在开发中重新加载。
我错过了什么?
更新: tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"declaration": true,
"removeComments": true,
"noImplicitAny": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"esModuleInterop": true,
"target": "es2017",
"sourceMap": true,
"outDir": "./dist",
"baseUrl": "./",
"incremental": true
},
"exclude": ["node_modules", "dist", "public"]
}
Run Code Online (Sandbox Code Playgroud)
我提到public文件夹位于src文件夹之外。他们处于同一水平。
我在从 Nestjs 异常过滤器编写自定义 http 响应时遇到问题
我正在使用 Nest Fastify 过滤器(不是 Express)
我正在创建捕获 UserNotFoundException 的自定义异常过滤器,如下所示:
@Catch(UserNotFoundException)
export class UserNotFoundExceptionFilter implements ExceptionFilter {
catch(exception: UserNotFoundException, host: ArgumentsHost) {
const errorResponse = new ErrorResponse<string[]>();
const response = host.switchToHttp().getResponse();
errorResponse.message = 'unauthorized exception'
errorResponse.errors = [
'invalid username or pass'
];
response.status(401).json(errorResponse)
}
}
Run Code Online (Sandbox Code Playgroud)
我不断收到response.status(...).json() 不是函数。
[Nest] 5400 - 05/17/2020, 00:27:26 [ExceptionsHandler] response.status(...).json is not a function +82263ms
TypeError: response.status(...).json is not a function
Run Code Online (Sandbox Code Playgroud)
我知道我必须向某种类型的响应编写者指定该响应的类型(例如:来自快递的响应)。
我尝试从express导入该 Response对象,并将响应变量的类型更新为Response(express),如下所示:
import {Response} from 'express';
Run Code Online (Sandbox Code Playgroud)
const …Run Code Online (Sandbox Code Playgroud) 我正在使用NestJS版本7.1.0并serverless创建 api 文档使用nestjs swagger。在本地,它像冠军一样工作,但部署后出现错误。
swagger-ui-express package is missing
Run Code Online (Sandbox Code Playgroud)
我在这里看到一些问题,但仍然没有解决这个问题。 https://github.com/nestjs/swagger/issues/277
这是我的package.json
"dependencies": {
"@nestjs/common": "^7.1.0",
"@nestjs/core": "^7.1.0",
"@nestjs/passport": "^7.0.0",
"@nestjs/platform-express": "^7.0.7",
"@nestjs/swagger": "^4.5.8",
"aws-serverless-express-binary": "^1.0.1",
"class-transformer": "^0.2.3",
"class-validator": "^0.11.1",
"dayjs": "^1.8.24",
"dotenv": "^8.2.0",
"dynamodb-data-types": "^3.0.1",
"express": "^4.17.1",
"faker": "^4.1.0",
"jest": "^24.9.0",
"jwks-rsa": "^1.6.0",
"latinize": "^0.4.1",
"lodash": "^4.17.15",
"mime-types": "^2.1.26",
"passport": "^0.4.1",
"passport-jwt": "^4.0.0",
"reflect-metadata": "^0.1.13",
"rimraf": "^3.0.0",
"rxjs": "^6.5.3",
"serverless-dynamodb-local": "^0.2.39",
"swagger-ui-express": "^4.1.4",
"tslint-loader": "^3.5.4",
"uuid": "^3.3.3",
"winston": "^3.2.1"
},
Run Code Online (Sandbox Code Playgroud)
这是配置: …
我想使用@nestjs 来管理配置文件。
现在我已经使用了以下方式来连接mysql和redis。
// app.module.ts
import { Module } from '@nestjs/common'
import { SequelizeModule } from '@nestjs/sequelize'
import { RedisModule } from 'nestjs-redis'
import { ConfigModule } from '@nestjs/config'
import { ExampleModule } from './example/example.module'
import { UserModule } from './user/user.module'
import config from './config' // I want to use @nestjs/config instead it
@Module({
imports: [
SequelizeModule.forRoot(config.DATABASE),
RedisModule.register(config.REDIS),
UserModule,
ExampleModule,
ConfigModule.forRoot()
],
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
可以通过@nestjs/config获取appmodule中他们的配置信息吗
我的问题更多的是如何实现这一点。我在文档中没有找到答案,所以问你);
例如:
我有 2 个实体用户和博客;
用户与博客是一对多关系;
我对用户的查询如下所示:
query {
me {
firstName
lastName
blogs {
title
description
}
}
}
Run Code Online (Sandbox Code Playgroud)
在 Nest.js 代码中我有解析器:
query {
me {
firstName
lastName
blogs {
title
description
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是如果我们尝试将查询更改为:
query {
me {
firstName
lastName
blogs {
title
description
user {
id
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题:我们可以将 ResolveField 委托给另一个解析器(例如 BlogResolver)吗?
我按照NestJS 的文档设置拦截器,但我面临以下问题:
Error: Cannot find module 'src/middleware/request.interceptor'
at Function.Module._resolveFilename (module.js:548:15)
at Function.Module._load (module.js:475:25)
at Module.require (module.js:597:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/mypath/dist/product/controller/product.controller.js:15:31)
at Module._compile (module.js:653:30)
at Object.Module._extensions..js (module.js:664:10)
at Module.load (module.js:566:32)
at tryModuleLoad (module.js:506:12)
at Function.Module._load (module.js:498:3)
Run Code Online (Sandbox Code Playgroud)
src/middleware/request.interceptor.ts
Error: Cannot find module 'src/middleware/request.interceptor'
at Function.Module._resolveFilename (module.js:548:15)
at Function.Module._load (module.js:475:25)
at Module.require (module.js:597:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/mypath/dist/product/controller/product.controller.js:15:31)
at Module._compile (module.js:653:30)
at Object.Module._extensions..js (module.js:664:10)
at Module.load (module.js:566:32)
at tryModuleLoad (module.js:506:12)
at Function.Module._load (module.js:498:3)
Run Code Online (Sandbox Code Playgroud)
src/产品/控制器/product.controller.ts
@Injectable()
export class LoggingInterceptor …Run Code Online (Sandbox Code Playgroud) 有人可以指导我如何在将 mongoose 与 NestJS 框架一起使用时自动递增集合内的任何字段。
例如:假设我有这个用户模式
@Schema()
export class User extends Document {
@Prop()
userId: number; // I want to increment this field on each new user
@Prop()
name: string;
@Prop({
type: String,
required: true,
unique: true,
})
email: string;
@Prop()
isEmailVerified: boolean;
@Prop({
type: String,
required: true,
unique: true,
})
mobile: string;
@Prop()
isMobileVerified: boolean;
@Prop({
type: String,
required: true,
})
password: string;
}
export const UserSchema = SchemaFactory.createForClass(User);
Run Code Online (Sandbox Code Playgroud)
我想增加每个新用户的 userId 。谢谢
我的 NestJS API 返回格式为“YYYY-mm-dd”的字符串,我希望它的格式类似于“dd-mm-YYYY”,或者如果可能的话返回日期对象。
NestJS 也无法识别 Angular 何时发送日期。我是否需要以特定方式将其作为字符串发送,或者 Nest 可以转换它?
我正在寻找答案和文档一段时间,但没有找到任何
我的实体是这样的:
export class Example {
@PrimaryGeneratedColumn()
id: number;
@Column('date', { nullable: true })
date: Date;
}
Run Code Online (Sandbox Code Playgroud)
API返回的结果是这样的:
[
{
'id': '1',
'date': '2020-06-25'
}
]
Run Code Online (Sandbox Code Playgroud) 我有一个处理注册、登录和其他一些功能的用户服务。我已经在该应用程序上工作了一段时间,有超过 10 个模块。但我注意到每次我注入另一个服务并尝试使用任何端点时我都会收到此错误错误"Unknown authentication strategy "jwt".错误是:-
Internal Server Error
Response body
{
"statusCode": 500,
"message": "Internal server error"
}
Run Code Online (Sandbox Code Playgroud)
一旦我从用户模块中删除注入的服务,一切都会恢复正常。我一直在尝试解决这个问题,因为我需要在用户模块内使用此服务。
这是 jwt.Strategy.ts
import { Injectable, HttpException, HttpStatus } from "@nestjs/common";
import { PassportStrategy } from '@nestjs/passport';
import { Strategy, ExtractJwt, VerifiedCallback } from "passport-jwt";
import { AuthService } from './auth.service';
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor(private authService: AuthService) {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
ignoreExpiration: false,
secretOrKey: process.env.SECRETKEY
});
}
async validate(payload: any, done: VerifiedCallback) {
const user …Run Code Online (Sandbox Code Playgroud) nestjs ×10
node.js ×4
typescript ×3
javascript ×2
angular ×1
fastify ×1
graphql ×1
localization ×1
module ×1
mongoose ×1
passport.js ×1
swagger ×1
typeorm ×1