【发布时间】:2019-11-11 23:58:31
【问题描述】:
我正在尝试向服务器上的 mongoDB 发出获取请求。这是我的网页将托管的同一台服务器。我创建了一个 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 放入server.js 中的methods,但我仍然遇到同样的错误。
我假设此错误来自corsOptions,但我需要更改/添加什么来解决此错误。
感谢任何帮助!
【问题讨论】:
-
错误提示来自服务器的空响应。你对服务器有什么期望?你没有返回任何东西。
-
@MMSA 我期待一个 JSON 格式的响应,当使用禁用安全性的 Chrome 时,我得到了这个。 mongoDB 不是空白的,所以它应该返回这个。
-
您是否尝试在两者中都将 serverIP 替换为 localhost?
-
@MMSA 将其全部更改为 localhost 时出现错误
Failed to load resource: net::ERR_EMPTY_RESPONSE。 -
您在浏览器中尝试过“serverip:3000/api/collection”吗?
标签: javascript node.js angular cors