成功进行CORS握手后,Angular 5 HttpClient POST请求为空

时间:2018-01-17 08:43:30

标签: node.js ajax angular http cors

我是JavaScript的新手,并且一直在努力将Angular的AJAX请求发送到后端Node.js Express应用程序。我的TypeScript文件中的POST请求如下所示,带有JSON正文:

    this.httpClient.post(url, createdOrUpdatedBlog, {headers: {'Content-Type': 'application/json; charset=utf-8'}})
    .subscribe(res => {
      this.router.navigate(['/admin/blogs/list']);
    },
    error => console.log(error));

在我的Node应用程序中,我有一些简单的中间件来处理CORS。

    app.use((req,res,next) => {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods',   'GET,PUT,POST,DELETE,OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
    res.header('Access-Control-Allow-Credentials', true);
    if(req.method === 'OPTIONS') {
       res.send(200);
    } else {
      next();
    }
  });

我可以看到OPTIONS请求并返回OK响应。我也可以看到POST,但它总是空的(没有标题或内容),我无法弄清楚原因。

Successful OPTIONS request Empty POST

这可能是我失踪的非常明显的事情。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我看到你正在使用HttpClient,你能尝试以这种方式设置标题吗?

{ headers: new HttpHeaders().set('Content-Type', 'application/json; charset=utf-8') }

至于您的有效负载,请检查您是否发送了空的有效负载。

(由于我的工作代理,我看不到图像,是在Chrome控制台还是在你的节点日志中?)

答案 1 :(得分:0)

事实证明这与CORS无关,而且是由于前端和后端之间的大小写差异......

非常感谢!