【问题标题】:Express: Remove charset=utf-8 from Content-Type "application/json; charset=utf-8"Express:从 Content-Type "application/json; charset=utf-8" 中删除 charset=utf-8
【发布时间】:2019-12-23 09:47:40
【问题描述】:

我有一个基于 NodeJS 和 express 的应用程序。每次我尝试获取响应时,我都会收到Content-Type: "application/json; charset=utf-8"。我无法在前端解析这个,因为我期待标题 Content-Type: "application/json" 的响应。

我也尝试过res.setHeader, res.set 方法,但似乎没有任何帮助。任何建议表示赞赏。

以下是我的快递代码:

const app = express();

configureMongoClient();

app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser());
app.options('*', cors())

app.use("/api-docs", swaggerUi.serve, swaggerUi.setup(swaggerDocument));

app.use((req, res, next) => {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET, PUT, POST');
    res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, X_BPI_CONTEXT');
    res.header("Content-Type", "application/json")
    next();
});
app.use("/users", usersRouter);
app.use(express.static(path.join(__dirname, "public")));

我的前端调用如下:

fetch(uri, {
    method: "POST",
    headers: {
      Content-Type: "application/json"
    },
    body: JSON.stringify(requestData),
  })
    .then((response) => {
      debugger;
      return response.json()
    }) .then((data) => {
        console.log(data);
      });

【问题讨论】:

    标签: node.js json rest express


    【解决方案1】:

    Express 将为您设置字符集。所以如果你想绕过它,不要使用 express 方法,因为res 扩展自:http.ServerResponse 你可以使用.writeHeader & .write

    res 对象是 Node 自己的响应对象的增强版 并支持所有内置字段和方法。

    res.writeHeader(200, { 'Content-Type': 'application/json' })
    res.write(JSON.stringify(object))
    res.end()
    

    无论如何,最好添加字符集,我建议您改为在前端进行更改。

    【讨论】:

    • 我也添加了前端调用。你能告诉我要修改什么以获得正确的结果,即能够从响应中读取数据作为 JSON 吗?
    • 通过该调用,您可以毫无问题地以 JSON 格式读取数据。你遇到了什么错误?我想你没有:{ headers: { Content-Type: "application/json" } }{ headers: { "Content-Type": "application/json" } }
    • 在邮递员 m 中进行调用时,将数据作为 json 返回,但来自前端的调用只是没有响应。虽然我获得了 200 次成功,但响应为空
    • 嗯老实说,您可能还有其他错误。很难说你显示的内容,检查浏览器的网络选项卡,看看控制台是否也有任何错误。我需要更多信息,因为该请求是正确的,如果它在 Postman 中工作,它应该在浏览器中工作,除非您收到 CORS 错误。
    • imgur.com/fjQexK0 这就是我的控制台的外观。我确实有一个 CORS 错误。这很奇怪,因为我在我的应用上启用了 cors。
    猜你喜欢
    • 2018-03-12
    • 2021-08-31
    • 2011-06-09
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    相关资源
    最近更新 更多