ОПЦИИ net :: ERR_EMPTY_RESPONSE Angular - Каковы настройки CORS? - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь сделать запрос get на mongoDB, который находится на сервере.Это тот же сервер, на котором будет размещаться моя веб-страница.Я создал API, чтобы веб-страница могла отправлять запросы к mongoDB.

Моя первая проблема заключалась в том, что он был заблокирован политикой CORS, поэтому я рассмотрел эту информацию и обнаруженную информацию привел к добавлению в corsOptions to server.js (файл API, работающий на сервере).

Это мой server.js (файл API, который я запускаю на сервере для подключения веб-страницы с помощью node.js connect to 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...');

My .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

Я запускал Chrome с этой командой в WIN + R:

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 в server.js, но я все еще получаю ту же ошибку.

Я предполагаю, чтоего ошибка из corsOptions, но что мне нужно изменить / добавить, чтобы устранить эту ошибку.

Любая помощь приветствуется!

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Прежде всего попробуйте протестировать ваш API с помощью Postman, чтобы убедиться, что вы получили правильный ответ.во-вторых, попробуйте добавить Cors без какой-либо опции.это гарантирует, что вы будете использовать параметры cors по умолчанию, а затем попытаться добавить свои по одному.

app.use(cors())

и наконец, вам не нужно добавлять headr к вашему http-вызову, поэтомуВы можете удалить эту часть

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

0 голосов
/ 01 июля 2019

Я думаю, если вы добавили

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

в качестве заголовка для клиентского вызова, который должен помочь.

Ссылка: " CORS GET возвращает пустое тело ответа в Firefox "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...