我正在尝试从sqlite3数据库中获取结果并让它们在jade模板中呈现,但基于我在此代码中放置的日志组合,似乎在等待db查询时呈现模板光洁度。
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
如何在数据库完成之前保持页面不被渲染?
答案 0 :(得分:3)
db.get
方法是异步的。您的工作方式render
正在执行db.get
之前执行,并设置rowResults
变量。
您必须在render
方法调用中调用db.get
方法:
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 });
});
});