【问题标题】:Get users info from nextcloud api从 nextcloud api 获取用户信息
【发布时间】:2021-03-09 03:03:07
【问题描述】:

使用node-nextcloud 模块,如何从数组中获取所有用户的电子邮件?例如,nc.users.get() 方法适用于一个用户 ID,但是当它是一百个用户 ID 时呢?我尝试直接通过循环使用该方法,但结果并不理想。

const fs = require('fs')
const NextCloud = require('node-nextcloud');
var nc = NextCloud("Domain", "User", "Password");
var arr = []

//get users id into array
nc.users.list(null, (err, ocs)=> {
    if (err) {
        console.error(err);
    }
    arr = ocs.data.users
    console.log(arr)
})
//try to get email for each id from array
nc.users.get('' , (err, ocs)=>{
    if (err) {
        console.log(err);
    }
    arr.forEach(email  => {
        console.log(ocs.data.email)
    })
})

【问题讨论】:

  • 为什么结果“不满意”
  • @TommyBs 因为 nc.users.get() 方法适用于一个用户 ID,但是当您有数百个用户 ID 时呢?

标签: javascript node.js


【解决方案1】:

我设法通过以下方式实现了结果:

nc.users.list(null, (err, ocs)=> {
    if (err) {
        console.error(err);
    }
    arr = ocs.data.users
    //console.log(arr)


    arr.forEach((item, index, array) => {
        nc.users.get(`${item}`, (err, ocs) => {
            if (err) {
                console.error(err);
            }
            console.log(ocs.data.email);
        })
    })
})

【讨论】:

    【解决方案2】:

    我不熟悉下一个云,但在我看来,您想首先使用 list 方法获取所有用户 ID,然后遍历该列表中的结果以获取每个用户。根据用户的数量,这可能是一个相当漫长的操作。您当前正在调用两个异步方法,但第二个不等待第一个完成。正如我所说,我不熟悉下一个云,但以下是您可能需要的粗略介绍

    async function getUsers() {
    let users = await nc.users.list();
    const userEmails = await Promise.all(users.map(async (userId) => {
        const user = await nc.users.get(userId);
        return user.email;
    
    }))
    
    console.log("user emails", userEmails);
    }
    
    getUsers();
    

    【讨论】:

    • 感谢您的参与。我设法通过以下方式实现了结果。
    猜你喜欢
    • 2013-12-08
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多