javascript - Node JS Javascript Class TypeError 不是函数

标签 javascript node.js sequelize.js

我不明白为什么我的代码不起作用。我有一个带有两个类方法的基本类。我试图从第一个方法中访问第二个类方法,但收到一个类型错误,指出第二个方法不是函数。大声笑我一直这样做,我错过了什么?

import models from '../../db';

class GroupRoleCheck {

  constructor() {
    this.group = null;
  }

  isGroupAdmin(params, callback) {
    let groupId = params.groupId;
    let userId = params.user.id;

    models.Group.findById(groupId, {
      include: [{ all: true }]
    })
    .then(group => {
      this.group = group;

      let found = this.group.Users.find(user => {
        return userId === user.id;
      });

      if (found) {
        return found.GroupMembers;
      }
    })
    .then(members => {

      if (members.role === 'groupAdmin') {
        return callback(null, true);
      } else {

        this.isOrgSuper();

        return callback({
          message: 'not authorized'
        }, false)
      }
    })
  }

  isOrgSuper() {
    console.log('===================================');
    console.log(this.group);
    console.log('===================================');
  }
}

export default GroupRoleCheck;

enter image description here

enter image description here

更新:

我正在从另一个文件中调用它,我正在实现 RBAC2 并传递调用 rbac。
import RBAC from 'rbac2';

import UserRoleCheck from '../permissions/user.permission';
import OrgRoleCheck from '../permissions/org.permission';
import GroupRoleCheck from '../permissions/group.permission';

let userRoleCheck = new UserRoleCheck();
let orgRoleCheck = new OrgRoleCheck();
let groupRoleCheck = new GroupRoleCheck();

let rules = [
  // Users:
  {
    a: 'admin',
    can: 'view organizations',
    when: userRoleCheck.isOrgAdminAll
  },
  // Organizations:
  {
    a: 'admin',
    can: 'view org details',
    when: orgRoleCheck.isOrgAdmin
  },
  {
    a: 'super',
    can: 'edit org details',
    when: orgRoleCheck.isOrgSuper
  },
  {
    a: 'super',
    can: 'delete org',
    when: orgRoleCheck.isOrgSuper
  },
  // Groups:
  {
    a: 'admin',
    can: 'create group',
    when: orgRoleCheck.isOrgAdmin
  },
  {
    a: 'admin',
    can: 'view group details',
    when: groupRoleCheck.isGroupAdmin
  },
  {
    a: 'super',
    can: 'edit group details',
    when: orgRoleCheck.isOrgSuper
  },
  {
    a: 'super',
    can: 'delete group',
    when: orgRoleCheck.isOrgSuper
  }
];

let rbac = new RBAC(rules);
export default rbac;

最佳答案

这是一个上下文问题,通过 ref 传递您的 isGroupAdmin 函数,您会丢失对实例的跟踪。我认为 RBAC 在内部将通过 callapply 调用该函数。

简单的解决方法是以 when 调用实例上的函数的方式更新您的规则,例如when: (params, cb) => orgRoleCheck.isGroupAdmin(params, cb)

关于javascript - Node JS Javascript Class TypeError 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46730706/

相关文章:

javascript - 如何在 findAll() 方法中进行空检查

javascript - 我如何在 magento 的单个产品弹出窗口中加载数据

javascript - 在 Meteor.js 中使用多个 Mongodb 数据库

node.js - Loopback 中 Application 模型的使用

node.js - 同步 sequelize.sync() 还是不同的方式?

javascript - 表之间的序列化和查询

c# - 如何处理渲染 asp.net MVC ChildAction 时所需的 Javascript 文件

javascript - Hook 调用无效。钩子(Hook)只能在函数组件的内部调用。?

javascript - 单击链接后如何保留以前网页的内容?

javascript - 如何在nodeJS中使用phantom包设置自定义页眉和页脚内容?