我正在尝试向服务器上的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
,但我需要更改/添加什么才能解决此错误。
感谢您的帮助!
答案 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
作为客户端调用的标头,应该可以解决问题。