我有一台运行在localhost:3000上的服务器,当我尝试在浏览器中访问localhost:3000时,我将app.js设置为使用角路由器。
(例如:angular.module("quickquiz-builder").service("SettingsService", function ($http, $q) {
const self = this;
self.foobar = function(){};
return self;
});
)
当我向我的api发出发布请求时,我会这样做:
app.use('/', express.static(path.join(__dirname, '/dist/Client')));
到现在为止,一切都正确,但是如何使我的服务器可从另一台计算机访问。例如,如果同一网络上的另一台计算机知道服务器的私有IP地址,我希望他在导航至192.168.1.10:3000时能够访问我的应用程序。现在我可以访问,但是我所有的http请求都失败了,并且出现以下错误
const headers = new Headers({
'Content-Type': 'application/json'
});
const options = new RequestOptions({
headers: headers
});
this.http.post('http://localhost:3000/api/someAction',{body},options)
.toPromise()
.then(//function)
在app.js中,我有以下内容:
Access to XMLHttpRequest at 'http://localhost:3000/api/someFunction'
from origin 'http://192.168.1.10:3000' has been blocked by CORS policy:
Response to preflight request doesn't pass access control check: It does not
have HTTP ok status.
答案 0 :(得分:0)
这是您收到的CORS错误消息。
您可以使用Express CORS中间件来允许其他来源的呼叫到您的服务器。确保选择正确的选项,以允许来自其他PC的呼叫。
https://expressjs.com/en/resources/middleware/cors.html
还要确保将CORS中间件放在应用程序定义的顶部。
const app = express();
app.use(cors({ origin: "*" })); // Do this first
//... the rest of your routes and handlers and middlewares
在看起来一切正常的本地计算机上,打开Chrome开发工具,并确保已成功进行OPTION
调用并成功实现,并返回了正确的标头。
最后,从安全角度出发,尽可能针对您的生产环境删除或限制CORS选项。仅在开发和测试期间使用灵活的CORS策略。