首页 > 解决方案 > 如何将 Node-js 数据库查询绑定到 Web 表单

问题描述

我正在使用 node 和 postgres,我是编写异步函数的新手,我正在尝试做的是一个非常简单的查询,它将对数据库中的记录进行总数,添加一个并返回结果。结果将在 DOM 生成之前可见。我不知道该怎么做,因为异步函数不会向调用者返回值(也可能我仍然有同步的心态)。这是功能:

function generateRTA(callback){
var current_year = new Date().getFullYear();
const qry = `SELECT COUNT(date_part('year', updated_on)) 
              FROM recruitment_process
              WHERE date_part('year', updated_on) = $1;` 
const value = [current_year]

pool.query(qry, value, (err, res) => {
    if (err) {
      console.log(err.stack)
    } else {
        var count = parseInt(res.rows[0].count) + 1
        var rta_no = String(current_year) + '-' + count
        callback(null, rta_no)        
    }
  })
}

对于前端,我使用带有简单 HTML 表单的哈巴狗。

const rta_no = generateRTA(function (err, res){
if(err){
    console.log(err)
}
else{
    console.log(res)
}
})


app.get('/new_application', function(req, res){
res.render('new_application', {rta_number: rta_no})
});

我可以在 console.log 中看到 rta_no,但是当值准备好后如何将它传递回 DOM?

标签: node.jspostgresql

解决方案


这似乎没问题,我只是不确定这一点:

结果将在 DOM 生成之前可见

这个约束违背了异步的目的,因为你的 DOM 应该等待返回的值在那里。而不是等待它,你可以只呈现页面,一旦函数返回并运行你的回调更新值。

此外,也许值得研究一下承诺


推荐阅读