前提・実現したいこと
Vue.js、Quasar、Node.js、Firebaseを使用して簡単な記録アプリを作っています。
現在データ登録機能を実装中ですが、ブラウザでデータ登録時に以下のCORSエラーが発生します。
発生している問題・エラーメッセージ
Access to XMLHttpRequest at 'http://localhost:3000/createRecord' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
'Access-Control-Allow-Origin'はバックエンドで設定しているはずなのに。。。
該当のソースコード
フロントエンド
vue
1methods: { 2 createRecord() { 3 4 let formData = new FormData(); 5 formData.append("test", this.record.test); 6 formData.append("date", this.record.date); 7 8 this.$axios 9 .post(`${process.env.API}/createRecord`, formData) 10 .then(response => { 11 console.log("response: ", response); 12 }) 13 .catch(err => { 14 console.log("err: ", err); 15 }); 16 )
バックエンド
JavaScript
1app.post('/createRecord', (request, response) => { 2 response.header('Access-Control-Allow-Origin', '*'), 3 db.collection('records').add({ 4 test: request.body.test, 5 date: request.body.date 6 }).then(() => { 7 response.send('Record added') 8 }) 9 console.log(request.body) 10 })
試したこと
axiosではなくfetchAPIを用いて以下のように実装しましたが、引き続きcorsエラーが発生し解決しませんでした。
フロントエンド
vue
1//省略// 2 3let formData = { 4 test: this.record.test, 5 date: this.record.date, 6} 7 8fetch(`${process.env.API}/createRecord`, { 9 method: "post", 10 mode: "cors", 11 cache: "no-cache", 12 credentials: "include", 13 headers: { 14 "Content-Type": "application/json" 15 }, 16 body: JSON.stringify(formData) 17 }) 18//省略// 19
バックエンドでは以下を追加してみましたが、解決に至りませんでした。
JavaScript
1 response.header('Access-Control-Allow-Origin', '*'), 2 response.header('Access-Control-Allow-Headers', 'Content-Type'), 3 response.header('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS'), 4 response.header('Access-Control-Max-Age', '600');
fetchAPIでmode: "no-cors"にするとデータ登録が可能ですが、セキュリティ面で危ないということでしたので、mode: "cors"の状態でデータを登録したいです。
corsについての知識が浅いため、フロント・バックエンド共にどのような実装にすべきか分からない状態です。
どなたかご回答いただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/23 10:59 編集
2021/01/23 11:23
2021/01/23 15:04
2021/01/24 01:48