javascript - 在 Express/Node.js 中渲染 MySQL 结果 : Cannot assign to read only property '_locals'

标签 javascript mysql node.js express handlebars.js

我正在尝试使用 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/

相关文章:

javascript - 如何将非空值移动到 Javascript 数组的前面

python - 在 python mysql 执行中转义 %

python - 使用 Python mysql 连接器将 Mysql 列名称存储在数组中

Javascript promise 链 hell

javascript - 以编程方式创建 aws API key 并将其添加到单一功能的使用计划中?

javascript - js 中函数的上下文可见性 (React.js)

javascript - 如何向 jQuery 添加元素旋转?

javascript - 如何在动态位置显示 jqueryUI

mysql - 使用什么才能在 Mysql 中拥有完整的合并表

node.js - 运行一次 mongodb 脚本以插入初始数据