【发布时间】:2021-01-17 18:36:51
【问题描述】:
我正在尝试在同一台 EC2 机器上运行 Node 和 React。我在开发人员工具的网络选项卡中收到错误 XHR (178) failed 错误。奇怪的是,当我将代码指向 localhost 并在笔记本电脑上运行 Node 时,代码运行良好。我还可以通过 Postman 连接到 API 并获取返回的数据。我认为这与安全性和权限有关。我在 EC2 上有一个自定义 TCP 入站(端口 3000)策略,并使用 0.0.0.0/0 打开出站。
这是一个代码 sn-p。
axios({
method: "post",
url: `${API_URL}auth?email=${emailAddress}&password=${pword}`,
headers: {
"content-type": "application/json",
},
data: JSON.stringify(params),
})
.then((result) => {
console.log(`status ${result.status}`);
if (result.status === 200) {
console.log(JSON.stringify(result.data));
另外,我的开发机器是 Windows,我的 EC2 实例是 Linux。
有人知道我为什么会收到 XHR 错误吗?您能否指出正确的方向来帮助解决此问题?
"dependencies": {
"@hapi/joi": "^17.1.1",
"arangojs": "^5.8.0",
"aws-sdk": "^2.735.0",
"bcryptjs": "^2.4.3",
"config": "^3.3.1",
"cors": "^2.8.5",
"dynamoose": "^2.3.0",
"express": "^4.17.1",
"googleapis": "^57.0.0",
"helmet": "^3.23.1",
"jsonwebtoken": "^8.5.1",
"lodash": "^4.17.20",
"mongoose": "^5.9.20",
"morgan": "^1.10.0",
"request-promise-native": "^1.0.8",
"winston": "^3.3.0"
},
"devDependencies": {
"chai": "^4.2.0",
"mocha": "^8.1.1",
"nyc": "^15.1.0"
}
我在节点端有以下代码。 (本地主机替换为我的产品服务器路径)
router.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", "http://localhost:3000"); // update to match the domain you will make the request from
res.header(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept,X-Auth-Token"
);
next();
});
【问题讨论】:
-
首先,这将是一个跨源请求,因为源(主机+端口)不同。因此,CORS 的所有规则都将适用。你说它在本地工作 - 你能分享你的 package.json 的样子吗?我怀疑它只通过你的 React 服务器代理请求,所以当你在本地运行它时它不会是跨域的。
-
这是我学到很多关于 CORS 的地方:developer.mozilla.org/en-US/docs/Web/HTTP/CORS
-
感谢您的回复。我更新了 package.json 中的依赖关系,我正在使用 cors 包。
标签: node.js reactjs amazon-ec2 xmlhttprequest