【问题标题】:Express js, what could cause an object to be sent through to a view as the literal word 'object'?Express js,什么可能导致将对象作为文字“对象”发送到视图?
【发布时间】:2021-06-04 08:46:35
【问题描述】:

使用 nodejs、express 和 ejs。

我定义了变量“结果”,当我在索引页面上的 router.get 函数中使用 console.log(result) 读取时,会产生一个完美形成的对象数组。

然后我继续在 router.get 函数中呈现新页面:

res.render('new_page', { title: 'New Page Header', parameters : result.rows});

标题在新页面上显示正确,但是参数,当我直接在ejs文件中引用它们时(),它们显示如下:

[对象对象],[对象对象],[对象对象],[对象对象],[对象对象],[对象对象],[对象对象]

正确地有七行,但它们与文字单词对象一起出现,而不是实际内容。同样,当我在 ejs 中引用单行时,它将显示为 [object Object],如果我尝试深入研究这些行,则不会出现任何内容。

将对象作为文字“对象”传递的可能原因是什么?可能很简单,因为我是新手,但对于我的生活,我无法解决。

【问题讨论】:

  • 您希望它如何呈现?如果你想要 JSON 格式,那么你可以这样做 -> parameters : JSON.stringify(result.rows),否则你需要扩展你的 EJS 来遍历数组。
  • 这就是数组 toString 的样子,iirc。
  • 不是字面意思object,而是字符串"[object Object]"。这就是您从 toString 在不覆盖 toString 的对象上得到的结果。从您的输出来看,您似乎有一个对象数组,并且您在其上使用toString,它将在数组的每个元素上使用toString,并将它们与, 连接在一起。
  • 您不能直接在模板中渲染数组。您必须在模板语言中迭代数组并呈现数组中的值。您也不能渲染一个对象,您必须渲染该对象的一个​​具有字符串值(或易于转换为字符串的值)的属性。

标签: javascript node.js express


【解决方案1】:

当你使用 ejs 渲染对象时,它会被字符串化。幕后发生的事情是正在调用 toString() 方法。如果您执行类似的操作,您可以自己看到这一点

console.log({key:"value"}.toString())

如果您想查看对象数组的实际内容,您需要调用 JSON.stringify(result.rows) 这会将“字符串”传递给 res.render 而不是“对象”。

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 2020-10-18
    • 1970-01-01
    • 2021-01-26
    相关资源
    最近更新 更多