在我的app.js中,我有以下内容尝试从sqlite数据库中检索数据并将其传递给我的一个视图:
app.get("/dynamic", function(req, res) {
var db = new sqlite3.Database(mainDatabase)
var posts = []
db.serialize(function() {
db.each("SELECT * FROM blog_posts", function(err, row) {
posts.push({title: row.post_title, date: row.post_date, text: row.post_text})
})
})
res.render("dynamic", {title: "Dynamic", posts: posts})
})
Run Code Online (Sandbox Code Playgroud)
谁能告诉我这里我做错了什么.帖子数组似乎保持空无一物.
编辑 我正在按照一个教程解释说虽然插件有异步,但这个方法不是异步的
这是教程中的引用
尽管Node.js具有回调和异步特性,但这些事务将串行运行,允许我们创建,插入和查询语句优先级将在当前语句之前运行.但是,sqlite3提供了具有相同接口的"并行"包装器,但并行运行所有事务.这完全取决于你目前的情况.
Ale*_*yne 13
这些db
调用可能是异步的.这意味着您在返回数据之前进行渲染.
您需要弄清楚如何从查询中获取一个回调,并在该回调中呈现您的模板.
看起来你想要complete
传递给第二个回调db.each()
(谢谢,Jonathan Lonowski,提示!)
var posts = [];
db.serialize(function() {
db.each("SELECT * FROM blog_posts", function(err, row) {
posts.push({title: row.post_title, date: row.post_date, text: row.post_text})
}, function() {
// All done fetching records, render response
res.render("dynamic", {title: "Dynamic", posts: posts})
})
})
Run Code Online (Sandbox Code Playgroud)
这个想法是在任何异步代码的最后一个回调中呈现,这样你就拥有了所需的一切.
归档时间: |
|
查看次数: |
7522 次 |
最近记录: |