我在端口8002上运行了一个nodejs/express后端API服务器,在端口3000上运行了一个reactjs前端应用程序。
我正在提交来自ReactJS前端应用程序的表单以发布到API服务器上,该服务器将其保存到数据库中。
我调用了一个函数save并继续提交表单。
下面是这样做的代码片段:
class Confirmation extends Component{
saveAndContinue = (e) => {
e.preventDefault();
console.log("props : " + JSON.stringify(this.props.values));
var form_id = Math.floor(Math.random() * 1000000);
let headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');
headers.append('Access-Control-Allow-Origin', '*');
fetch("http://localhost:8002/sharepoint/big_data_poc/" + form_id,{
method:'POST',
//mode: 'cors',
body:JSON.stringify(this.props.values),
headers: headers
}).then(res => res.json()).then(this.setState({confirmation_id:form_id}))
.then(response => console.log('Success:', JSON.stringify(response)))
.catch(error => console.error('Error:', error));
this.props.nextStep();
}
我还向nodejs服务器响应头添加了访问控制allow origin
cb_service.prototype.addForm = function(req,res,form_id, doc_type,payload){
logger.info(JSON.stringify(payload));
bucket.upsert(form_id,payload,function(err,result){
if(err){
logger.error("error inserting data in couchbase")
}
else {
res.setHeader('Access-Control-Allow-Origin','*')
res.setHeader('Access-Control-Allow-Methods','POST, GET, OPTIONS, PUT')
res.setHeader('mode','cors')
logger.info("successful inserts");
res.status(200);
return res.json({"success":"ok"});
}
})
}
我根本看不到任何请求进入服务器。我只是在浏览器控制台中看到以下错误:
加载失败
http://localhost:8002/sharepoint/big_data_poc/944960
:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许来源”头。起源
http://localhost:3000
因此不允许访问。如果不透明的响应满足您的需求,请将请求的模式设置为“无CORS”,以获取禁用CORS的资源。
最感谢您的帮助!!我想我已经做了所有类似问题推荐的事情了。即使是Safari也会抛出以下错误:
[错误]加载资源失败:源
网址:http://localhost:3000
不允许访问控制允许来源。(408661,0行)
[错误]无法加载Fetch API
http://localhost:8002/sharepoint/big_data_poc/408661
. 起源
网址:http://localhost:3000
不允许访问控制允许来源。
非常感谢!