Express:从内容类型“application/json; charset=utf-8”中删除 charset=utf-8

Pra*_*thi 9 rest json node.js express

我有一个基于 NodeJS 和 Express 的应用程序。每次我试图获取响应时,我都会得到Content-Type: "application/json; charset=utf-8". 我无法在前端解析它,因为我期待 header 的响应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")));
Run Code Online (Sandbox Code Playgroud)

我的前端调用如下:

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

Mar*_*nde 9

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

\n
\n

res 对象是 Node\xe2\x80\x99 自己的响应对象的增强版本\n并且支持所有内置字段和方法。

\n
\n
res.writeHead(200, { 'Content-Type': 'application/json' })\nres.write(JSON.stringify(object))\nres.end()\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n