从集合中获取全部的猫鼬返回一个空列表

时间:2018-09-01 06:15:41

标签: node.js angular mongodb typescript mongoose

我在项目中创建了一个新集合,并使用相同的语法检索所有用户以从该集合中检索所有用户,但是由于某种原因,我最终得到了一个空数组或列表。有人可以让我知道为什么这是我刚接触MongoDB的原因。下面是我的代码。当我在查询之前放置console.log并被调用时,该服务被调用。将数据保存到数据库也可以正常工作。该收藏集只有一个字段是帐号。

我有服务

async function getAll() {
    return await accountdb.find({});
}

控制器

function getAll(req, res, next) {
    accountdbService.getAll()
        .then(account => res.json(account))
        .catch(err => next(err));
}

在前端我有

 getAll() {
    return this.http.get<account[]>(`${environment.apiUrl}/account`);
  }

最后是组件

ngOnInit() {
    this.loadAllAccounts();
  }

  private loadAllAccounts() {
    this.AccountService.getAll().pipe(first()).subscribe(account => {
      this.accounts = account;
      console.log(this.accounts);
    });
    console.log(this.accounts);

}

调用api时的邮递员响应:

[
    {
        "_id": "5b89e647e1e6540ac28d68b1",
        "logDataInput": "admin changed the status of user test2 to manager",
        "__v": 0,
        "id": "5b89e647e1e6540ac28d68b1"
    },
    {
        "_id": "5b89e648e1e6540ac28d68b2",
        "logDataInput": "admin changed the status of user test2 to User",
        "__v": 0,
        "id": "5b89e648e1e6540ac28d68b2"
    },
    {
        "_id": "5b8a2a6b16206e0cae8c71ba",
        "logDataInput": "admin deactivated user test2",
        "__v": 0,
        "id": "5b8a2a6b16206e0cae8c71ba"
    }
]

network tool 2 api calls picture

2 个答案:

答案 0 :(得分:2)

看起来您在响应getAll函数时发送了错误的变量。

    .then(logTrack => res.json(account)

为此

    .then(logTrack => res.json(logTrack)

答案 1 :(得分:0)

原因是getAll()函数是异步的,也就是说,可以直接在subscribe函数之前执行之后的代码。

似乎正在设置您的数组,但是通过在订阅之外检查它,就可以在之前检查它。