【问题标题】:express js response returning object as string将 js 响应返回对象表示为字符串
【发布时间】:2021-10-30 06:52:46
【问题描述】:

为什么将 js 返回的对象表示为字符串。 我有数组类型对象 const cars = ["Saab", "Volvo", "BMW"];但是当我将此对象返回给调用代码时,它作为字符串而不是对象返回,如何在 response.send 中返回一个对象?

const express = require('express');
const router = express.Router();
router.get('/', async function (req, res, next) {
  const cars = ["Saab", "Volvo", "BMW"];
   res.send(cars );
  
})

谢谢,

【问题讨论】:

  • 试试res.json(cars)
  • 我也试过同样的问题
  • 你的 http 客户端标头是什么?
  • 我尝试使用 application/json 并且没有,仍然相同,这就是我在这里发布问题的原因
  • HTTP 响应是字符串。如果你想返回一个对象的字符串表示,你需要告诉 express 为你转换它(这就是 res.json 所做的)

标签: node.js express


【解决方案1】:

首先,您不能通过 http 发送实时 Javascript 对象。您必须将其转换为底层传输能够发送的内容,然后接收端可以读取该格式并将其转换为接收方 Javascript 引擎中的实时 Javascript 对象。

因此,对于 http 和 Javascript 对象,这通常意味着您发送对象的 JSON 表示,它是一个字符串,因为 JSON 是一种专门为序列化/反序列化 Javascript 对象而设计的文本格式。

默认情况下,res.send(cars) 将看到您正在尝试发送一个 Javascript 对象(在本例中为数组)并将其序列化为 JSON,将响应的 content-type 设置为 application/json 并发送它.然后,接收者需要识别该内容类型并将 JSON 解析回其对象形式。

在您的具体示例中,您只显示了可能正确发送 JSON 作为响应的服务器端代码。您将需要客户端代码来识别该内容类型并将其再次解析为实时 Javascript 对象。如果您显示此交易的客户端代码,我们可以提供更具体的帮助。

例如,当使用浏览器-Javascript 中的fetch() 接口时,您需要执行以下操作:

let response = await fetch(someURL);
let obj = await response.json();

将 JSON 响应解析为 Javascript 对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-01
    • 2018-08-23
    • 1970-01-01
    • 2011-08-03
    • 2015-02-27
    • 2017-07-07
    • 2018-06-15
    • 2016-08-15
    相关资源
    最近更新 更多