У меня есть серверный сервер NodeJS / Express API, работающий на порте 8002, и приложение ReactJS frontEnd на порте 3000.
Я отправляю форму из веб-приложения activJS для публикации на сервере API, который сохраняет ее в базе данных.
Я вызываю функцию saveAndContinue для отправки формы.
Ниже приведен фрагмент, который делает это:
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();
}
Также я добавил Access-Control-Allow-Origin в заголовок ответа сервера nodeJS
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: Ответ на запрос предварительной проверки не проходит проверку контроля доступа: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Происхождение 'http://localhost:3000' поэтому не допускается. Если непрозрачный ответ отвечает вашим потребностям, установите режим запроса «no-cors», чтобы получить ресурс с отключенным CORS.
Любая помощь наиболее ценится! Я думаю, что я сделал все, что рекомендовано аналогичными вопросами по SO. Даже Safari выдает следующую ошибку:
[Ошибка] Не удалось загрузить ресурс: Источник http://localhost:3000 не разрешен Access-Control-Allow-Origin. (408661, строка 0)
[Ошибка] Fetch API не может загрузить http://localhost:8002/sharepoint/big_data_poc/408661. Источник http://localhost:3000 не разрешен Access-Control-Allow-Origin.
Большое спасибо!