【发布时间】:2018-04-30 03:48:42
【问题描述】:
我需要调用函数以便将 mysql 查询数据呈现到我的视图中,而不是在 router.get 中使用查询函数
如何在router.get 中调用function(),以便通过EJS 或任何其他模板引擎呈现其查询输出?
index.js
function fdb(mypar) {
obj = {}
con.query(mypar, (err, rows) => {
if (err) throw err
obj = rows[0]
console.log(obj)
//rows data fetching OK using stored procedure get_all_1 when route '/' is called
})
}
/* GET home page. */
router.get('/', function(req, res, next) {
fdb('CALL get_all_1')
console.log(obj) // {}
to_render = { print: obj }
console.log(to_render) // { print: {} }
res.render('index', to_render);
//it obviously cannot render anything
//GET / 500
});
index.ejs
<% print.forEach(function (qdata) { %>
<tr>
<td>
<%= qdata.name %>
</td>
<td>
<%= qdata.location %>
</td>
</tr>
<% }) %>
当我尝试通过router.get 中的fdb() 函数调用obj 时,我以某种方式理解它超出了范围,但不知道如何操作该范围。
【问题讨论】:
-
@Cadmos 如果能解决您的问题,请标记答案。
-
@jfriend00 这不是他问题的答案。是使用
let/const还是旧的var是他的决定,与他的问题完全无关。你居然叫他自己解决! -
@Vasikos - 如果我认为这是对这个问题的回答,我会把它放在一个实际的答案中。 OP 在基于服务器的异步代码中使用未声明的变量。这是灾难的秘诀。错误的代码可能会导致错误,应使用
var、let或const声明它们。我在教育他们应该解决这个问题。我没有说变量声明问题是一个答案。另一方面,我引用的链接确实解释了fdb()的问题以及如何返回他们需要做的异步结果。 -
@Vasikos - 这是 cmets 在这里要做的一件事 - 指出关于代码的其他事情,这些事情没有被视为解决方案,但是 OP 应该知道的其他事情。而且,如果他们继续在异步代码中使用未声明的(隐式全局变量)以这种方式编程,他们的代码将充满错误。
标签: javascript mysql node.js express ejs