但是,我在 Repository 类中找不到任何 Repository.extend 方法,文档中也没有任何相关内容。怎么解决这个问题呢?
类型版本:“^0.3.0”
我正在使用 Nest js 并尝试创建自定义存储库。
我有个问题。随着@EntityRepository
装饰器在 中被标记为已弃用typeorm@^0.3.6
,现在推荐的或 TypeScript 友好的方式来为 NestJS 中的实体创建自定义存储库?之前的自定义存储库如下所示:
// users.repository.ts
import { EntityRepository, Repository } from 'typeorm';
import { User } from './user.entity';
@EntityRepository(User)
export class UsersRepository extends Repository<User> {
async createUser(firstName: string, lastName: string): Promise<User> {
const user = this.create({
firstName,
lastName,
});
await this.save(user);
return user;
}
}
Run Code Online (Sandbox Code Playgroud)
由于 NestJS 默认配置了 TypeScript 支持,因此我可以usersRepository.createUser()
在这样的服务中毫无问题地调用:
// users.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from './user.entity';
import …
Run Code Online (Sandbox Code Playgroud) 我正在将类验证器包与 NestJS 一起使用,并且我希望验证一组对象,这些对象需要恰好具有 2 个具有相同布局的对象:
到目前为止,我有:
import { IsString, IsNumber } from 'class-validator';
export class AuthParam {
@IsNumber()
id: number;
@IsString()
type: string;
@IsString()
value: string;
}
Run Code Online (Sandbox Code Playgroud)
和
import { IsArray, ValidateNested } from 'class-validator';
import { AuthParam } from './authParam.model';
export class SignIn {
@IsArray()
@ValidateNested({ each: true })
authParameters: AuthParam[];
}
Run Code Online (Sandbox Code Playgroud)
每个@kamilg 响应(我能够强制执行 2 个元素):
import { IsArray, ValidateNested, ArrayMinSize, ArrayMaxSize } from 'class-validator';
import { AuthParam } from './authParam.model';
export class SignInModel {
@IsArray()
@ValidateNested({ each: true …
Run Code Online (Sandbox Code Playgroud) 在控制器级别的 Nest.js 应用程序中,我必须验证 DTO。
我很难检查项目是否不为空(如果任何列表项目为null
或,则请求应被拒绝undefined
)
下面的代码演示了我配置的验证。
import { ArrayMinSize, IsArray } from 'class-validator'
export class ReminderPayload {
// ...
@IsArray()
@ArrayMinSize(1)
recipients: string[]
}
Run Code Online (Sandbox Code Playgroud)
{
"recipients": [
null
]
}
Run Code Online (Sandbox Code Playgroud)
string
唯一(如果对象位于数组项位置,则应拒绝处理)?'class-validator'
注入成功,它为我的 API 生成了一些验证结果。
我需要构建一个 API,其中大多数路由都以一个通用 URL 部分为前缀,该部分也有一个参数。
在我的具体情况下,我的路线需要看起来像:
/accounts/:account/resource1/:someParam
/accounts/:account/resource2/:someParam/whatever
/accounts/:account/resource3/
/accounts/:account/resource4/subResource/
等等..
所以最好我会创造一个家长的路线/accounts/:account/
,将包含儿童路由(resource1
,resource2
,resource3
,resource4
,等...)。
我还需要:account
可以从所有子路由访问该参数。
使用 NestJS 实现这一目标的最佳方法是什么?
我创建这个.env
文件:
TYPE=xxx
HOST=xxx,
PORT=xxx,
USERNAME=xxx,
PASSWORD=xxx,
DATABASE=xxx,
Run Code Online (Sandbox Code Playgroud)
在我的文件中,我以这种方式使用:
import * as dotenv from "dotenv";
dotenv.config();
export const typeOrmConfig: TypeOrmModuleOptions = {
port: process.env.PORT
}
Run Code Online (Sandbox Code Playgroud)
但我可以用我只能port
从变量.env
文件,我不能用变量的休息,谁能告诉我,为什么我不能用我的瓦尔的休息吗?
我正在将我的应用程序从 express.js 移动到 Nest.js,并且我找不到一种方法来引用另一个 mongoose Schema,而不使用使用 mongoose.Schema({...}) 声明 Schema 的旧方法。
让我们使用文档中的示例,以便我可以澄清我的问题:
@Schema()
export class Cat extends Document {
@Prop()
name: string;
}
export const CatSchema = SchemaFactory.createForClass(Cat);
Run Code Online (Sandbox Code Playgroud)
现在,我想要的是这样的:
@Schema()
export class Owner extends Document {
@Prop({type: [Cat], required: true})
cats: Cat[];
}
export const OwnerSchema = SchemaFactory.createForClass(Owner);
Run Code Online (Sandbox Code Playgroud)
当我以这种方式定义模式时,我会收到一个错误,类似于:无效的模式配置:Cat
不是数组中的有效类型cats
那么,使用这种更面向对象的方法来定义架构,在另一个架构中引用一个架构的正确方法是什么?
我正在开发我的第一个 NestJS 应用程序,它在app.module.ts
.
但是根据我们的要求,我不得不从环境文件中选择数据库配置值。为此,我遵循了 nestjs 文档网站上的配置文档 - https://docs.nestjs.com/techniques/configuration
但问题是我需要在同一个文件中使用 .env 变量进行数据库连接,这是失败的。
这是我运行良好的原始代码:
@Module({
imports: [
MongooseModule.forRoot(`mongodb+srv://myusername:mypassword@myhost.net?retryWrites=true&w=majority&db=dbname`, { useNewUrlParser: true, dbName: 'dbname' }),
ProductModule,
CategoryModule,
],
controllers: [
AppController,
HealthCheckController,
],
providers: [AppService, CustomLogger],
})
Run Code Online (Sandbox Code Playgroud)
现在,我想从.ENV文件,这是喜欢挑选那些DB值local.env
,dev.env
取决于环境等。现在,我的这段代码不起作用:
@Module({
imports: [
ConfigModule.forRoot({ envFilePath: `${process.env.NODE_ENV}.env` }),
MongooseModule.forRoot(`mongodb+srv://${ConfigModule.get('DB_USER')}:${ConfigModule.get('DB_PASS')}@myhost.net?retryWrites=true&w=majority&db=dbname`, { useNewUrlParser: true, dbName: 'dbname' }),
ProductModule,
CategoryModule,
],
controllers: [
AppController,
HealthCheckController,
],
providers: [AppService, CustomLogger],
})
Run Code Online (Sandbox Code Playgroud) Cookies不是通过 发送到服务器的getServerSideProps
,下面是前端的代码:
export async function getServerSideProps() {
const res = await axios.get("http://localhost:5000/api/auth", {withCredentials: true});
const data = await res.data;
return { props: { data } }
}
Run Code Online (Sandbox Code Playgroud)
在服务器上,我有一个检查访问 JWT 令牌的策略。
export class JwtStrategy extends PassportStrategy(Strategy, "jwt") {
constructor() {
super({
ignoreExpiration: false,
secretOrKey: "secret",
jwtFromRequest: ExtractJwt.fromExtractors([
(request: Request) => {
console.log(request.cookies) // [Object: null prototype] {}
let data = request.cookies['access'];
return data;
}
]),
});
}
async validate(payload: any){
return payload;
}
}
Run Code Online (Sandbox Code Playgroud)
也就是说,当我通过getServerSideProps
cookie 发送请求时,不会到达服务器,尽管如果我发送,例如通过useEffect …
我正在使用 NestJS 和 TypeORM 开发应用程序。每当我尝试从我的实体生成迁移(通过运行typeorm migration:generate
)时,我都会收到以下消息:
No changes in database schema were found - cannot generate a migration. To create a new empty migration use "typeorm migration:create" command
Run Code Online (Sandbox Code Playgroud)
我什至删除了所有现有的迁移文件(从迁移文件夹中)以排除任何冲突的可能性。
在我将应用程序的模块文件夹结构更改为:
src
|- config
| |- database
| |- mysql
| |- cli-configuration.ts
|- migrations
|- module1
|- controller
|- entity
|- service
Run Code Online (Sandbox Code Playgroud)
可以看出,migrations
文件夹就在下面src
,每个模块都有一个entity
文件夹,其中放置了该模块的实体。所有 ormconfig 设置都来自cli-configuration.ts
文件。
在package.json
文件中,我添加了以下内容scripts
:
{
...
"scripts": {
...
"typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js …
Run Code Online (Sandbox Code Playgroud) nestjs ×10
typescript ×5
node.js ×4
javascript ×3
typeorm ×3
dotenv ×2
validation ×2
api ×1
arrays ×1
jwt ×1
migration ×1
mongodb ×1
next.js ×1
reactjs ×1
reference ×1
request ×1
schema ×1
subdocument ×1