我正在尝试使用 Handlebars 来显示从 MySQL 查询返回的一些数据。路线如下所示:
var query = "SELECT col1, col2, col3 FROM table WHERE section >= " + start + " AND section <= " + end + " ORDER BY col1 ASC";
connection.query(query, function(err, result) {
if (err) throw err
var data = JSON.stringify(result);
console.log(data);
res.render('text', data);
});
“data”看起来正是我想要的样子,具有包含三列和正确值的对象数组。我的 Handlebars 的相关部分如下所示:
{{#each data}}{{data.col2}}{{/each}}
然后,当我尝试加载页面时,出现以下错误(如果有帮助,我可以显示更多内容):
TypeError: Cannot assign to read only property '_locals' of <and then my array of objects followed by a stack trace>
我想我不明白 MySQL 查询是如何返回的。
最佳答案
完全删除 JSON.stringify()
行并传递 { result: result }
(或者如果您有现代版本的 Node (v4.x+)) 直接到您的 res.render()
。
该行实际上将数据库结果转换为 JSON 字符串。 JSON 字符串和 JavaScript 对象不同。通过省略 JSON.stringify()
,您可以将 result
保留为一个可以在模板中迭代的正确数组(不是包含数组的字符串)。
此外,您的 Handlebars 模板需要如下所示:
{{#each result}}{{this.col2}}{{/each}}
关于javascript - 在 Express/Node.js 中渲染 MySQL 结果 : Cannot assign to read only property '_locals' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38580356/