我正在使用FeathersJS和MongoDB来开发一个应用程序。我想防止某些服务创建某些值(或值对(的重复项。
例如,使用 feathers-cli 工具创建的 FeathersJS "Authenticate" 服务不会阻止应用程序使用相同的电子邮件创建 2 个或更多用户(至少使用 MongoDB(。另一个例子是为每个用户创建一些"类别"的服务。我希望后端阻止用户创建 2 个或更多具有相同名称的类别,但我需要允许 2 个不同的用户创建自己的类别,尽管他们的名字相同(但不是用户(。
我知道我可以通过使用MongoDB集合中的索引来做到这一点,但这会使应用程序依赖于MongoDB。
有没有人知道是否有任何类型的钩子或任何推荐的方式来做这些事情"FeathersJS方式"?
谢谢!
在大多数情况下,唯一性可以 - 并且应该 - 在数据库或ORM/ODM级别上投保,因为它将为您提供最佳性能(在大多数情况下不值得为可移植性牺牲(。
一种更像羽毛的方式并完成更复杂的限制是羽毛钩,它是羽毛的重要组成部分,并在基本指南中进行了详细解释。
在这种情况下,before
钩子可以查询项目总数,如果有的话会引发错误:
const { Conflict } = require('@feathersjs/errors');
app.service('myservice').hooks({
before: {
create: [async context => {
const { fieldA, fieldB } = context.data;
// Request a page with no data and extract `page.total`
const { total } = await context.service.find({
query: {
fieldA,
fieldB,
$limit: 0
}
});
if(total > 0) {
throw new Conflict('Unique fields fieldA and fieldB already exist');
}
return context;
}]
}
})