我正在使用FeathersJS和MongoDB开发应用程序。我想阻止某些服务创建一些值(或值对)的重复。
例如,使用feathers-cli工具创建的FeathersJS“Authenticate”服务不会阻止应用程序使用相同的电子邮件创建2个或更多用户(至少使用MongoDB)。另一个例子是为每个用户创建一些“类别”的服务。我希望后端阻止用户创建两个或多个具有相同名称的类别,但我需要允许2个不同的用户创建自己的类别,尽管他们的名称相同(但不是用户)。
我知道我可以通过使用MongoDB集合中的索引来实现这一点,但这会使应用程序MongoDB依赖。
是否有人知道是否有任何类型的钩子或任何建议的方式来做这些事情“FeathersJS方式”?
谢谢!
在大多数情况下,唯一性可以 - 而且应该 - 在数据库或ORM / ODM级别进行保险,因为它将为您提供最佳性能(在大多数情况下,不值得牺牲便携性)。
更多的Feathers-y方式和完成更复杂的限制将是Feathers hooks,它是Feathers的重要组成部分,并详细解释in the basics guide。
在这种情况下,before
钩子可以查询total of items并抛出error,如果有的话:
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;
}]
}
})