从另一台计算机向Express.js api发送请求

时间:2019-05-13 16:27:35

标签: node.js angular express

我有一台运行在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.

1 个答案:

答案 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策略。