javascript 如何在JS中使用对象指定函数

ctehm74n  于 2023-01-29  发布在  Java
关注(0)|答案(1)|浏览(135)

我正在尝试建立一个函数,允许用户从数据库中检索数据,但以动态的方式。因此,允许他们指定源表,以及哪些列,他们想检索。
我已经构建了允许他们选择表和列的部分,这些用户只能访问我们乐意让他们检索的数据。
我想让它尽可能的动态,所以我创建了一个函数来帮助我实现这一点,但到目前为止我遇到了一个问题,我有这个函数:

const modelMap = (model, action, criteria, options) => {

    const models = {
      EXTERNAL_USER: {
        READ: services.externalUser.readExternalUser(criteria, options),
      },
      TASK: {
        READ: services.task.readTask(criteria, options),
      },
      USER: {
        READ: services.user.readUser(criteria, options),
      },
    }

    return models[model][action]
  }

例如,我调用这个函数
modelMap('EXTERNAL_USER', 'READ', { id: userID }, { populates: ['documents'] }).
这将返回我想要的数据,但是我在终端中得到一个'OperationError':

OperationalError [UsageError]: Invalid populate(s).
Details:
  Could not populate `documents`.  There is no attribute named `documents` defined in this model.

这个错误是说Task模型没有documents属性,而实际上它没有,所以我猜即使我没有试图访问readTask函数,它还是被调用了,我该如何解决这个问题呢?

    • 解决方案**

我将models对象更改为以下内容:

const models = {
      EXTERNAL_USER: {
        READ: () => services.externalUser.readExternalUsers(criteria, options),
      },
      TASK: {
        READ: () => services.task.readTask(criteria, options),
      },
      USER: {
        READ: () => services.user.readUser(criteria, options),
      },
    }

然后我可以使用await modelMap(model, action, criteria, options)()来获取所需的数据。

相关问题