微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pg 中 client.query() 之外的变量未更新

如何解决pg 中 client.query() 之外的变量未更新


我目前正在编写一个简单的笔记(好吧,“分配”)Web 应用程序,使用 Hapi 作为后端,使用 Postgresql 作为数据库。我目前的问题是在获取所有笔记的路线上,我在将数据从数据库传递到前端时遇到了麻烦。

这是我的代码

        method: 'GET',path: '/report',// Todo Process data from DB into preformat text & table view
        handler: (request,h) => {

            const currentWeek = new Date().getWeek()
            getReport = `
            SELECT * FROM main_assignment WHERE week = ${currentWeek-1}
            `
            let tableArray= new Array
            let finalTable = ''

            //FIXME: show finalTable on view

            client.connect()
            client.query(getReport,(err,res) => {
                res.rows.forEach(element => {
                    const temp = `
                        <tr>
                        <td>${element.id}</td>
                        <td>${element.name}</td>
                        <td>${element.assignment}</td>
                        </tr>`
                    tableArray.push(temp)
                });
                finalTable = tableArray.join('')

                console.log(finalTable)
                return h.view('report',{
                    finalTable
                })
            })

            return h.view('report',{
                finalTable
            })

当我刷新页面时,表格没有被填充。原来 finalTable 的输出是空白的。我试图在 client.query() 函数中将它注销,它实际上以我想要的方式出现(填充了来自 forEach 迭代的数据)。现在这是我知道的事情

  1. 我还没有完全掌握异步概念。这可能是我搞砸的地方,我很惭愧地承认我已经重新阅读了整个概念,但仍然没有清楚地了解它的工作原理和用法
  2. 是的,数据传递很糟糕(新字符串,将所有响应转换为数组,将所有数组连接到前一个字符串)。我......不知道有什么更好的写法,所以请随意更改

有什么办法可以修复代码,这样我就可以将 finalTable 值传递给前端吗?

提前致谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。