Express/Node.js中呈现MySQL结果:无法分配给只读属性'_当地人'

Rendering MySQL result in Express/Node.js: Cannot assign to read only property '_locals'

本文关键字:分配 只读属性 当地人 js Node 结果 MySQL Express      更新时间:2023-09-26

我正在尝试使用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"看起来正是我想要的,它有一个包含三列和正确值的对象数组。我的车把的相关部分看起来像:

{{#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 }(如果您有现代版本的节点(v4.x+),则仅传递{ result })直接传递给您的res.render()

这一行实际上是将数据库结果转换为JSON字符串。JSON字符串和JavaScript对象不相同。通过省略JSON.stringify(),您可以将result保留为一个适当的数组(而不是包含数组的字符串),它可以在模板中迭代。

此外,你的车把模板需要看起来像:

{{#each result}}

您似乎正在向模板传递字符串类型data

尝试更换线路

res.render('text', data);

res.render('text', result);