【问题标题】:Firestore Query returns [object Object ] to BrowserFirestore 查询返回 [object Object ] 给浏览器
【发布时间】:2020-08-25 23:35:25
【问题描述】:

查询 Firestore 时,浏览器返回 [object Object],[object Object] 而不是:

{ > 描述:“这是一份工作机会”, > 主动:真实, > 地点:“华沙”, > 名称:“银行学士”, > 截止日期:时间戳 { _seconds: 1603317600, _nanoseconds: 0 } > } > { > 描述:“这是另一个工作机会”, > 地点:“阿姆斯特丹”, > 名称:'PM 工作', > 主动:真实, > 截止日期:时间戳 { _seconds: 1607554800, _nanoseconds: 0 } > }

这是一条路由,我想传递数组,以便在 EJS 视图上动态呈现它。

router.get('/projects', async(req, res) => {
    
        var array = [];
        const snapshot = await firebase.firestore().collection('projects').get()
        snapshot.forEach(doc => {
            array.push(doc.data());
        })
    
        res.render('projects', { array })
    
    });

有没有办法在路由处理程序上传递这些对象值?

【问题讨论】:

  • 您可能想尝试在路由器中对其进行字符串化:res.render('projects', { JSON.stringify(array) })
  • @FrankvanPuffelen 我认为这对我没有帮助,因为我无法在 EJS 中操作它——即使我明白你的意思。
  • 嗨@PauloBrás 你能检查这两个案例herehere 并确认它们是否对你有帮助吗?它们显示了可能对您有所帮助的路由器的不同方法,包括您检索数据的顺序不同,这可能是您的问题的原因。
  • @gso_gabriel 谢谢你 - 它没有答案,但它有让我找到解决方案的提示! :)

标签: javascript node.js firebase express google-cloud-firestore


【解决方案1】:

感谢@gso_gabriel 的建议,我设法找到了答案。

在你的 express 中间件上发送 Object 是可以的,但是你需要在你的 EJS 视图上使用 forEach() 以便它循环通过你的对象并提取元素。


router.get('/projects', async(req, res) => {


    const snapshot = await firebase.firestore().collection("projects").get();
    
    const docs = snapshot.docs.map(doc => doc.data())

    res.render('projects', { docs });

});

然后在你的 EJS 上你需要做docs.forEach()

 <% docs.forEach(doc => { %>
                            <%- doc.Name; %>
                                <% }); %>

在 EJS 中,您可以使用它来添加您希望在前端拥有的任何 html 元素。

我希望这对未来的用户有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多