将 Knex.js select 的结果传递给 ejs 模板
Pass result of Knex.js select to ejs template
我目前正在使用 Express 开发一个项目,我正在使用 knex.js 进行查询和迁移。
我有一段时间没有接触节点,所以我有点生疏。本质上,我正在尝试从我的 table 之一中获取 select 记录,然后在我的一条路线中调用该函数,然后遍历并将其输出到我的 ejs 模板中。
单位模型
'use strict'
const knex = require('knex')(require('../../knexfile'))
module.exports = function(app) {
this.getAll = function() {
knex.select('id', 'unit_prefix', 'unit_name').from('units').then(function(units) {
return units;
})
}
return this
}
然后在我的routes.js文件中:
app.get('/dashboard', ensureAuthenticated, function(req, res) {
// console.log(req.user)
console.log(unitModel.getAll)
res.render('dashboard', { user: req.user, units: unitModel.getAll })
})
如果我 console.log
unitModel.getAll
的结果我得到 [Function]
。我已经了解了 knex 如何使用 promises 并且是异步的,但是我仍然没有设法使用其他答案来解决我相当简单的问题。
在我的 dashboard.ejs
文件中,我有以下代码:
<h3>Jump to unit:</h3>
<%if (units.length > 0) { %>
<% units.forEach(function(unit) { %>
<div class="dashboard-course-item" tooltip="First year unit, covers the basics of web foundations">
(<%= unit.unit_prefix %>) <%= unit.unit_name %>
</div>
<% }) %>
<% } else { %>
<strong>Currently no units have been created.</strong>
<% } %>
我目前在 units
table 中有一条记录并且总是看到 Currently no units have been created.
消息。
我需要将什么更改为 return 我可以在我的 ejs 模板中迭代的数组或对象?
提前致谢!
在他们的 .then 回调函数中异步承诺 return 它们的值,如果你 return 承诺本身它将 return undefined 因为在那一刻承诺仍然没有解决.
要使您的代码正常工作,您应该这样做:
单位模型
'use strict'
const knex = require('knex')(require('../../knexfile'))
module.exports = function(app) {
this.getAll = function(){
return new Promise(function(resolve,reject) {
knex.select('id', 'unit_prefix', 'unit_name').from('units')
.then(function(units) { resolve(units);})
.catch(function(error) {reject(error);})
})
}
return this
}
routes.js
app.get('/dashboard', ensureAuthenticated, function(req, res) {
// console.log(req.user)
unitModel.getAll()
.then(function(units){
res.render('dashboard', {
user: req.user,
units: units
})
})
})
我目前正在使用 Express 开发一个项目,我正在使用 knex.js 进行查询和迁移。
我有一段时间没有接触节点,所以我有点生疏。本质上,我正在尝试从我的 table 之一中获取 select 记录,然后在我的一条路线中调用该函数,然后遍历并将其输出到我的 ejs 模板中。
单位模型
'use strict'
const knex = require('knex')(require('../../knexfile'))
module.exports = function(app) {
this.getAll = function() {
knex.select('id', 'unit_prefix', 'unit_name').from('units').then(function(units) {
return units;
})
}
return this
}
然后在我的routes.js文件中:
app.get('/dashboard', ensureAuthenticated, function(req, res) {
// console.log(req.user)
console.log(unitModel.getAll)
res.render('dashboard', { user: req.user, units: unitModel.getAll })
})
如果我 console.log
unitModel.getAll
的结果我得到 [Function]
。我已经了解了 knex 如何使用 promises 并且是异步的,但是我仍然没有设法使用其他答案来解决我相当简单的问题。
在我的 dashboard.ejs
文件中,我有以下代码:
<h3>Jump to unit:</h3>
<%if (units.length > 0) { %>
<% units.forEach(function(unit) { %>
<div class="dashboard-course-item" tooltip="First year unit, covers the basics of web foundations">
(<%= unit.unit_prefix %>) <%= unit.unit_name %>
</div>
<% }) %>
<% } else { %>
<strong>Currently no units have been created.</strong>
<% } %>
我目前在 units
table 中有一条记录并且总是看到 Currently no units have been created.
消息。
我需要将什么更改为 return 我可以在我的 ejs 模板中迭代的数组或对象?
提前致谢!
在他们的 .then 回调函数中异步承诺 return 它们的值,如果你 return 承诺本身它将 return undefined 因为在那一刻承诺仍然没有解决.
要使您的代码正常工作,您应该这样做:
单位模型
'use strict'
const knex = require('knex')(require('../../knexfile'))
module.exports = function(app) {
this.getAll = function(){
return new Promise(function(resolve,reject) {
knex.select('id', 'unit_prefix', 'unit_name').from('units')
.then(function(units) { resolve(units);})
.catch(function(error) {reject(error);})
})
}
return this
}
routes.js
app.get('/dashboard', ensureAuthenticated, function(req, res) {
// console.log(req.user)
unitModel.getAll()
.then(function(units){
res.render('dashboard', {
user: req.user,
units: units
})
})
})