从Node.js服务器检索数据并在Javascript客户端中循环时出错
我有一个node.js服务器来获取我的帖子数据。 基本上,它通过过滤器和订单获取集合中的所有文档:从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
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(...)