我试图找出使用 type-graphql 和 typeorm 和 postgresql db(使用 apollo 服务器和 express)处理一对多关系的最佳方法。我有一个与课程表具有一对多关系的用户表。我目前处理此问题的方法是使用 @RelationId 字段创建一列 userCourseIds,然后使用 @FieldResolver 和 dataloader 批量获取属于该用户的课程。我的问题是,对于 @RelationId 字段,无论我是否实际查询 userCourses,都会进行一个单独的查询来获取关系 ID。有没有办法解决这个问题,它不会进行额外的查询,或者有没有更好的方法来处理一对多关系?
关系的用户端:
@OneToMany(() => Course, (course) => course.creator, { cascade: true })
userCourses: Course[];
@RelationId((user: User) => user.userCourses)
userCourseIds: string;
Run Code Online (Sandbox Code Playgroud)
关系的课程方面:
@Field()
@Column()
creatorId: string;
@ManyToOne(() => User, (user) => user.userCourses)
creator: User;
Run Code Online (Sandbox Code Playgroud)
用户课程字段解析器:
@FieldResolver(() => [Course], { nullable: true })
async userCourses(@Root() user: User, @Ctx() { courseLoader }: MyContext) {
const userCourses = await courseLoader.loadMany(user.userCourseIds);
return userCourses;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试从我的 Joi 验证模式返回多个自定义错误消息。这是架构
const Joi = require("@hapi/joi");
const string = Joi.string();
const emailSchema = string.email();
const usernameSchema = string
.min(3)
.max(30)
.error(() => "Username must be between 3 and 30 characters");
const passwordSchema = string
.min(6)
.error(() => "Password must be at least 6 characters");
const confirmPasswordSchema = Joi.valid(Joi.ref("passwordSchema")).error(
() => "Passwords must match"
);
const localRegistrationSchema = Joi.object().keys({
email: emailSchema.required().error(() => "Email is required"),
username: usernameSchema.required().error(() => "Username is required"),
password: passwordSchema.required().error(() => "Password is required"),
confirmPassword: confirmPasswordSchema
}); …Run Code Online (Sandbox Code Playgroud) 我正在使用 @hapi/joi 进行快速验证和卫生。验证时,某些验证器不工作。在这个中,trim() 不仅不会验证输入字符串开头和结尾的空格,而且它也不会修剪它,因为它应该默认将 convert 设置为 true。但是,检查有效电子邮件和需要两者都可以工作并抛出各自的错误。我也试过小写(),但没有验证或将其转换为小写。
const Joi = require("@hapi/joi");
const string = Joi.string();
const localRegistrationSchema = Joi.object().keys({
email: string
.email()
.trim()
.required()
.messages({
"string.email": "Email must be a valid email address",
"string.trim": "Email may not contain any spaces at the beginning or end",
"string.empty": "Email is required"
})
});
Run Code Online (Sandbox Code Playgroud) express ×3
hapijs ×2
joi ×2
dataloader ×1
graphql ×1
node.js ×1
typegraphql ×1
typeorm ×1
validation ×1