【问题标题】:CORS POST Request Returns Empty BodyCORS POST 请求返回空正文
【发布时间】:2017-06-21 15:53:44
【问题描述】:

作为这个问题“Make POST JSON Request From HTML Script To A Node.JS App In Another Domain”的后期,我实现了一个CORS POST请求:

var request = new XMLHttpRequest();
var params = "parameter=test";
request.open('POST', 'http://localhost:3009/param_upload', true);
request.onreadystatechange = function() {if (request.readyState==4) alert("It worked!");};
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.send(params);

它与互联网上的示例非常接近。这是我在 node.js 服务器端的设置:

app.use(cors());
var corsOptions = {
  origin: '*',
  credentials: true,
  allowedHeaders: ['*'],
  optionsSuccessStatus: 200
}

当然,我的 app.post 函数的标头中有 cors(corsOptions)。然而不知何故,身体是空的。作为请求,我得到了一个很长的响应,里面没有测试文本。我可能错过了一点,但环顾四周却找不到。如果有人帮忙,我会很高兴的。

【问题讨论】:

  • 在控制台中查找错误?对于allowedHeaders*,请参阅stackoverflow.com/questions/13146892/…
  • 函数返回成功。没有错误。我会检查 allowedHeaders。
  • “但不知何故主体是空的”节点JS端或发送的http请求本身是空的?为什么在使用 cors 中间件后创建一个 corsOptions 对象?您必须将这些选项提供给 cors 中间件功能才能激活:app.use(cors(corsOptions));
  • 我只看到了 node.js 端,那里是空的。如果该函数只需要 CORS,则建议在函数内部使用带有 cors() 的 corsOptions 的示例,因此以这种方式实现。也会尝试您建议的方式。
  • 您可以使用浏览器检查器。大多数时候右键单击并检查。然后转到网络选项卡。现在您可以看到所有请求,当您单击请求时,您应该会看到它的详细信息。

标签: javascript node.js cors


【解决方案1】:

我想你忘记使用 BodyParser 中间件了。

https://github.com/expressjs/body-parser

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())

有了这个中间件,你所有的身体数据都会在 req.body 中。

示例:

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

【讨论】:

  • 我不敢相信我忘记了这一点。太感谢了。我有一个用于其他请求的 json,但忘记检查是否需要一个用于 urlencoded 字符串。再次,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 2018-01-14
  • 1970-01-01
  • 1970-01-01
  • 2015-03-21
  • 1970-01-01
  • 2015-10-15
相关资源
最近更新 更多