从Node.js服务器检索数据并在Javascript客户端中循环时出错

从Node.js服务器检索数据并在Javascript客户端中循环时出错,javascript,node.js,firebase,google-cloud-firestore,Javascript,Node.js,Firebase,Google Cloud Firestore,我有一个node.js服务器来获取我的帖子数据。 基本上,它通过过滤器和订单获取集合中的所有文档: var ref = db.collection('posts'); var visible = request.query.visible; var query = null; if(visible === true) { query = ref.where('visible', '==', true) .orderBy('creation_date', 'desc'); } els

我有一个node.js服务器来获取我的帖子数据。 基本上,它通过过滤器和订单获取集合中的所有文档:

var ref = db.collection('posts');
var visible = request.query.visible;
var query = null;

if(visible === true) {
  query = ref.where('visible', '==', true)
    .orderBy('creation_date', 'desc');
}
else {
  query = ref.orderBy('creation_date', 'desc');
}

query.get()
  .then(res => {
    result.send(res);
  })
  .catch(err => {
    result.status(500).send(err);
  });
在客户端,我向服务器发出Ajax请求,并循环接收到的项目

firestore类中的Ajax请求GetPosts()函数

var firebaseApiRequest = AjaxRequest(`${this.apiUrl}/posts`, 'GET');
  firebaseApiRequest.send();

  firebaseApiRequest.onreadystatechange = function () {
    if(this.readyState === 4) {
      if(this.status === 200) resolve(JSON.parse(this.responseText));
      else {
        resolve([]);
      }
    }
  }
index.js函数显示我从服务器收到的帖子

let firestoreAPI = new firestore();
firestoreAPI.GetPosts().then(posts => {
  posts.forEach(post => {
    console.log(post);
    let json = post.data();
    json.id = post.id;
    postsList.push(json);
  });
  BuildPosts();
});
在node.js服务器上,一切正常,我得到了回复。当代码到达posts.forEach时,我得到了这个错误:

未捕获(承诺中)类型错误:posts.forEach不是函数

这就是我从服务器返回的Json(我已经删除了一些敏感数据)


我解决了在服务器端使用文档数据和ID构建自定义Json的问题。

鉴于您显示的Json,您返回的对象上确实不会有
forEach

我看到的唯一数组是
\u materializedDocs
,您可以使用它进行循环:

posts._materializedDocs.forEach(...)

如果使用
console.log(this.responseText)
,将更容易看到发生了什么,但逻辑表明这不会返回数组。@FrankvanPuffelen我已使用从服务器获得的Json更新了问题描述。
posts._materializedDocs.forEach(...)