box - 无法使用 nodeJS box sdk 创建新的协作

box - cannot create new collaboration using the nodeJS box sdk

我正在构建一个使用 box 的应用程序,我想为给定用户在我的文件夹上添加协作。

查看 box doc 我正在做以下事情 :

const assignUserToFolder = function(appUserId) {

    //Get App auth client
    const boxAdminClient = 
        BoxSdk.getAppAuthClient('enterprise', process.env.BOX_ENTERPRISE_ID);
    console.log(`assign user ${appUserId} to folder ${process.env.BOX_FOLDER_ID}`);
    boxAdminClient.collaborations.createWithUserID(
      appUserId, 
      process.env.BOX_FOLDER_ID, 
      boxAdminClient.collaborationRoles.EDITOR, (
        function (error, boxResponse) {
          if (error) {
            console.log(`error ${error}`);
          }
    }));

};

我已验证 box 客户端正确,appUserId 和 folderId 的值正确。

我也直接使用 API 直接进行了测试,我能够为我的文件夹更新和设置正确的角色。

但即使我将等同于我的节点代码

const assignUserToFolderAPI = function(appUserId) {
    var requestParams = {
      body: {
        item: {
          id: process.env.BOX_FOLDER_ID,
          type: "folder"
        },
        accessible_by: {
          id: appUserId,
          type: "user"
        },
        role: "editor"
      }
    };

    //Get App auth client
    const boxAdminClient = BoxSdk.getAppAuthClient('enterprise', process.env.BOX_ENTERPRISE_ID);
    return new Promise(function (resolve, reject) {
        //Create the collaboration in Box
        console.log(`create collaboration for user ${appUserId}`);
        boxAdminClient.post('/collaborations', requestParams, boxAdminClient.defaultResponseHandler(function(error, boxResponse) {
                if (error) {
                reject(error);
                console.log(requestParams);
                  }

                  resolve(boxResponse);
          }));
    });
};

我收到以下错误消息

"errorMessage": "Unexpected API Response [404 Not Found] (not_found: \"Not Found\")",

当我查看 requestParams 时,item.idaccessible_by.id 都是正确的,并且它在 CLI 中工作得很好。

有谁知道为什么这行不通?可能是我使用的服务帐户有问题吗?

盒子应用中:

当我 运行 它传递一个 appUserId 和一个有效的 folderId 时,您的代码似乎 运行 没问题。您遇到的错误是什么?

尝试 运行 以查看该文件夹上的协作:

boxAdminClient.folders.getCollaborations('xxxxxx', null, function(err, data) {
      console.log(data);
      data.entries.forEach(function(element) {
          console.log(element)
      }, this);
  })

好吧,结果跟版本没关系。 这应该有效...

adminAPIClient.enterprise.getUsers({filter_term: FOLDER_OWNER_EMAIL}, function (err, users) {
 var owner = users.entries[0];
 var userAPIClient = sdk.getAppAuthClient('user', owner.id);  // folder owner id

userAPIClient.collaborations.createWithUserID(
APP_USER_ID,   
FOLDER_ID, 
userAPIClient.collaborationRoles.EDITOR, 
function(err, data) {
  console.log(err);
   });
 });