【问题标题】:How do I use express.json() and set headers (res.setHeader) simultaneously?如何同时使用 express.json() 和设置标头 (res.setHeader)?
【发布时间】:2022-11-17 04:46:16
【问题描述】:

我正在尝试查看 POST 请求的主体并设置一些标头。具体来说,我需要允许 localhost -> localhost 通信,这意味着添加 Access-Control-Allow-Origin: * 作为标头。

到目前为止我的代码是:

const express = require("express");

const app = express();
const port = 8080;

app.use(express.json());

app.use((req, res, next) => {
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.header(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content-Type, Accept"
  );
  res.sendStatus(200);
  next();
});

app.post('/', function (req, res) {
  console.log(req.body.name)
  res.end();
});

app.listen(port, () => console.log(`Listening on port ${port}`));

当我运行服务器时,我得到Cannot set headers after they are sent to the client

我怎样才能将两个 app.use() 结合起来?

我试过更改通话顺序,但这不起作用。

【问题讨论】:

  • 问题不在您共享的代码中。您在发送正文后在某处设置标头。这里没有发送正文的代码。
  • 嗨@Evert,感谢您的快速回复!我正在通过不同的方法 (axios) 发送 POST 请求,但我必须更改响应标头(我认为?)以便我可以从 http:localhost 发送到 http:localhost。这行得通,但是当我尝试合并 express.json() 以读取 POST 请求的主体时,它就失败了。

标签: json express post cors body-parser


【解决方案1】:

我在发布问题后想出了一个办法,所以我在这里分享给其他人:

const express = require("express");

const app = express();
const port = 8080;

app.use(function( req, res, next ) {
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.header(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content-Type, Accept"
  );
  res.sendStatus(200);
  let data = "";
  req.on('data', function( chunk ) {
    data += chunk;
  });
  req.on('end', function() {
    console.log (data);
    next();
  });
});

app.listen(port, () => console.log(`Listening on port ${port}`));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 2014-01-16
    • 2021-06-29
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多