gpt4 book ai didi

javascript - 响应呈现 Jade 并在 sqlite3 完成查询之前发送

转载 作者:行者123 更新时间:2023-11-28 19:37:15 25 4
gpt4 key购买 nike

我正在尝试从 sqlite3 数据库获取结果并让它们在 jade 模板中呈现,但根据我在此代码中放置的日志组合,似乎模板是在等待数据库查询时呈现的完成。

var express = require('express');
var router = express.Router();
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('test_dab');

/* GET home page. */

var rowResults;


router.get('/', function(req, res) {


db.get('SELECT ID, first_name, last_name FROM customer WHERE ID = 33', function(err, row){
rowResults = 'Hello, ' + row.first_name + ' ' + row.last_name + '!';
console.log(row);
console.log(rowResults);
});


console.log(rowResults);

res.render('index', { title: 'Express',
whatever: rowResults });
});

console.log('Router found index');
module.exports = router;

这是控制台中的输出:

//on browser refresh...

undefined
GET / 304
{ ID: 22, first_name: 'Bo', last_name: 'Jackson' }
Hello, Bo Jackson!
GET /stylesheets/style.css 304
GET /javascripts/main.js 304

如何在数据库完成之前阻止页面呈现?

最佳答案

db.get 方法是异步的。按照您的方式,renderdb.get 返回并设置 rowResults 变量之前执行。

您必须在 db.get 方法调用中调用 render 方法:

router.get('/', function(req, res) {
db.get('SELECT ID, first_name, last_name FROM customer WHERE ID = 33', function(err, row){
var rowResults = 'Hello, ' + row.first_name + ' ' + row.last_name + '!';
res.render('index', { title: 'Express',
whatever: rowResults });
});
});

关于javascript - 响应呈现 Jade 并在 sqlite3 完成查询之前发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25670275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com