首页 > 解决方案 > 只允许在内部服务调用上创建多个条目

问题描述

我想在内部服务调用中创建多个条目。但是对于外部传输(rest、websockets),这个功能仍然应该被阻止。

我知道 multi 选项可以在服务选项中设置为 true 或 ['create'] 但这并不能解决问题,因为外部传输可以创建多个条目。

我的第一个解决方案是:

someService.hooks.js

...
before: {
  create: [
    context => {
      if (!context.params.provider) {
        context.service.options.multi = true;
      }
      return context;
    }
  ],
}
...

但这完全覆盖了所有服务调用的服务选项。

我想出的唯一其他解决方案是将 service.multi 设置为 true 并使用挂钩验证每个外部服务调用。

这是唯一可行的解​​决方案还是我错过了什么?

标签: mongodbfeathersjs

解决方案


您当前可以做的是启用multi: [ 'create' ]并检查钩子是否是外部调用,并在这种情况下为数组抛出错误:

const { BadRequest } = require('@feathersjs/errors');
// ...
  create: [
    async context => {
      if (context.params.provider && Array.isArray(context.data)) {
        throw new BadRequest('Not allowed');
      }

      return context;
    }
  ],

在即将发布的版本中,只需将multi选项传入(在本期params中跟踪)即可


推荐阅读