首页 > 解决方案 > 来自 pg 的 client.query() 之外的变量未更新

问题描述


我目前正在使用 Hapi 作为后端和 PostgreSQL 作为数据库编写一个简单的笔记(嗯,'assignment')网络应用程序。我目前的问题是获取所有笔记的路线,我无法将数据从数据库传递到前端。

这是我的代码:

        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 值传递给前端?

提前致谢!

标签: javascriptnode.jspghapi

解决方案


推荐阅读