定义和使用从 Express 传递到 EJS 的对象

Defining and using an object passed from Express to EJS

在我的路由处理程序中,我将一个对象(该对象是 SELECT 查询数据库的结果)传递到我的 ejs 文件,该文件呈现如下:

const query = await pool.query('SELECT * FROM table');
const obj = query.rows();
response.render('/ejspage', {
   obj: obj
});

在我的 ejs 文件中,我试图将这个对象分配给一个变量并循环遍历它:

<script>
   var data = '<%= obj %>';

   data.forEach(function(o) {
      console.log(o);
   }
</script>

这会导致以下错误:Uncaught TypeError: obj.forEach is not a function

我试过使用 JSON.parse(obj) 但这会导致以下错误 Uncaught SyntaxError: Unexpected token o in JSON at position 1

我也曾尝试 JSON.stringify(obj) 解决错误,但没有成功

当我打印出变量 console.log(obj) 时,我得到:

[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

我知道我可以在 ejs 中使用嵌入式 javascript(当我这样做时,我可以在 obj 上使用 forEach() 就好了)但是为了我的特定目的,我想按照所示的方式来做(即在 <script> 标签内)。

您需要同时使用 JSON.stringifyJSON.parse

 <script>
   var data = JSON.parse('<%= JSON.stringify(obj) %>');

   data.forEach(function(o) {
      console.log(o);
   }
</script>

我发现在某些情况下,JSON stringifyJSON parse 仍然出错,并从 post 做 cookie 解析中获得灵感

 <script>
   var data = JSON.parse(decodeURIComponent('<%=encodeURIComponent( JSON.stringify(data) ) %>')) 

   data.forEach(function(o) {
      console.log(o);
   }
</script>

替代方法是使用 res.cookie,但限制为 4 MB