【问题标题】:Defining and using an object passed from Express to EJS定义和使用从 Express 传递到 EJS 的对象
【发布时间】:2022-01-02 23:33:11
【问题描述】:

在我的路由处理程序中,我将一个对象(该对象是对数据库的 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() 就好了)但出于我的特定目的,我想按照所示的方式进行操作(即在 &lt;script&gt;标签)。

【问题讨论】:

    标签: javascript express ejs


    【解决方案1】:

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

     <script>
       var data = JSON.parse('<%= JSON.stringify(obj) %>');
    
       data.forEach(function(o) {
          console.log(o);
       }
    </script>
    

    我发现在某些情况下,JSON parseJSON stringify 仍然会出错,并从进行 cookie 解析的帖子中获得灵感

     <script>
       var data = JSON.parse(decodeURIComponent('<%=encodeURIComponent( JSON.stringify(data) ) %>')) 
    
       data.forEach(function(o) {
          console.log(o);
       }
    </script>
    

    另一种方法是使用res.cookie,但限制为 4 MB

    【讨论】:

    • 不使用JSON.parseJSON.stringify 只是互相否定?我发现的另一个解决方案是执行以下操作:var data = ;,然后允许我使用 .forEach() 遍历 obj
    • 到 中的代码是在服务器端运行的,基本上JSON.stringify 将转换字符串中的对象并添加到正在发送给客户端的html页面中,然后当浏览器加载页面时它会将字符串转换为对象(使用JSON.parse
    猜你喜欢
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 2012-06-24
    • 2018-05-14
    • 2015-09-08
    • 2018-09-07
    相关资源
    最近更新 更多