选项net :: ERR_EMPTY_RESPONSE Angular-CORS设置是什么?

时间:2019-07-01 10:09:38

标签: javascript node.js angular cors

我正在尝试向服务器上的mongoDB发出get请求。这是将与我的网页托管的服务器。我创建了一个API,以便该网页可以向mongoDB发出请求。

我的第一个问题是它被CORS策略阻止,因此我调查了一下,发现的信息导致我将corsOptions添加到server.js(服务器上运行的API文件)。

这是我的server.js(我正在服务器上运行的API文件,用于通过node.js连接到mongoDB来连接网页)

// Dependencies
var express = require('express');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var cors = require('cors');
var app = express();


const corsOptions = {
    origin = true,
    methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
    credentials: true,
    preflightContinue: true,
    maxAge: 600,
};
app.options('*', cors(corsOptions))
app.use(cors(corsOptions))

// MongoDB
mongoose.connect('mongodb://serverip:27017/database');

// Express
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

// Routes
app.use('/api', require('./routes/api'));

// Start server
app.listen(3000);
console.log('Listening on port 3000...');

我的.component.ts运行一个简单的httpClient.get请求以获取信息,如下所示:

const httpOptions = {
  headers: new HttpHeaders({
    'Access-Control-Allow-Origin': '*'
  })
};

this.httpService.get('http://serverip:3000/api/collection/', httpOptions).subscribe(
    result => {
        console.log(result);
    },
    error => {
        console.log('Error occured', error);
    }
)

我在Google Chrome浏览器中遇到以下错误:

OPTIONS http://serverip:3000/api/collection/ net::ERR_EMPTY_RESPONSE

我已经在WIN + R中使用此命令运行Chrome:

chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security

我在该Chrome上收到此错误:

OPTIONS http://serverip:3000/api/collection/ net::ERR_EMPTY_RESPONSE

如果我删除了server.js中与CORS有关的代码,并在没有网络安全性的情况下在Chrome中加载了网页,则该网页从MongoDB加载了数据而没有任何问题。

我还尝试将OPTIONS放入methods的{​​{1}}中,但仍然出现相同的错误。

我认为此错误来自server.js,但我需要更改/添加什么才能解决此错误。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

首先,尝试使用Postman测试您的API,以确保您获得正确的响应。第二,尝试添加任何选项。这样可以确保您使用默认的cors选项,然后尝试一一添加。

app.use(cors())

最后,您无需在http调用中添加任何标题,因此可以删除此部分

const httpOptions = {
  headers: new HttpHeaders({
    'Access-Control-Allow-Origin': '*'
  })
};

答案 1 :(得分:-1)

我猜你是否添加了

Access-Control-Allow-Origin: *
Content-Type: application/json
Cache-Control: no-cache

作为客户端调用的标头,应该可以解决问题。

参考:“ CORS GET returns an empty response body in Firefox