Saya telah membuat API kecil menggunakan Node / Express dan mencoba menarik data menggunakan Angularjs tetapi karena halaman html saya berjalan di bawah apache di localhost: 8888 dan simpul API mendengarkan pada port 3000, saya mendapatkan No 'Access-Control- Izinkan-Asal '. Saya mencoba menggunakan node-http-proxy
dan Vhosts Apache tetapi tidak memiliki banyak keberhasilan, silakan lihat kesalahan penuh dan kode di bawah ini.
XMLHttpRequest tidak dapat memuat localhost: 3000. Header 'Access-Control-Allow-Origin' tidak ada pada sumber daya yang diminta. Karena itu, 'localhost: 8888' tidak diizinkan mengakses. "
// Api Using Node/Express
var express = require('express');
var app = express();
var contractors = [
{
"id": "1",
"name": "Joe Blogg",
"Weeks": 3,
"Photo": "1.png"
}
];
app.use(express.bodyParser());
app.get('/', function(req, res) {
res.json(contractors);
});
app.listen(process.env.PORT || 3000);
console.log('Server is running on Port 3000')
Kode sudut
angular.module('contractorsApp', [])
.controller('ContractorsCtrl', function($scope, $http,$routeParams) {
$http.get('localhost:3000').then(function(response) {
var data = response.data;
$scope.contractors = data;
})
HTML
<body ng-app="contractorsApp">
<div ng-controller="ContractorsCtrl">
<ul>
<li ng-repeat="person in contractors">{{person.name}}</li>
</ul>
</div>
</body>
Jawaban yang diterima baik-baik saja, jika Anda lebih suka sesuatu yang lebih pendek, Anda dapat menggunakan plugin bernama cors yang tersedia untuk Express.js
Sangat mudah digunakan, untuk kasus khusus ini:
sumber
{origin: 'null'}
agar berfungsi ... Ternyata, peramban saya mengirimnull
sebagai asal?app.use(cors({origin: '*'}));
bekerja untuk saya, sesuai aktif-kor .Cara lain, cukup tambahkan header ke rute Anda:
sumber
)
dari smiley membingungkan sayaThe top jawaban bekerja dengan baik bagi saya, kecuali bahwa saya perlu daftar putih lebih dari satu domain.
Juga, jawaban teratas menderita dari kenyataan bahwa
OPTIONS
permintaan tidak ditangani oleh middleware dan Anda tidak mendapatkannya secara otomatis.Saya menyimpan domain yang masuk daftar putih seperti
allowed_origins
pada konfigurasi Express dan meletakkan domain yang benar sesuai denganorigin
tajuk karenaAccess-Control-Allow-Origin
tidak mengizinkan menentukan lebih dari satu domain.Inilah yang akhirnya saya dapatkan:
sumber
Kode jawaban hanya memungkinkan untuk localhost: 8888. Kode ini tidak dapat digunakan untuk produksi, atau nama server dan port yang berbeda.
Untuk membuatnya berfungsi untuk semua sumber, gunakan ini sebagai gantinya:
sumber
Instal dependensi kor di proyek Anda:
Tambahkan ke file konfigurasi server Anda berikut ini:
Ini bekerja untuk saya dengan versi 2.8.4 cors.
sumber
"cors": "^2.8.5", "express": "^4.16.3",
berfungsi dengan baik hanya dengan garis yang disarankan @monikaja. Terima kasih!Ini berhasil untuk saya.
Anda dapat mengubah * agar sesuai dengan kebutuhan Anda. Semoga ini bisa membantu.
sumber
Hai ini terjadi ketika ujung depan dan belakang berjalan pada port yang berbeda. Browser memblokir respons dari backend karena tidak adanya header CORS. Solusinya adalah dengan membuat menambahkan header CORS dalam permintaan backend. Cara termudah adalah dengan menggunakan paket nors cpm.
Ini akan memungkinkan tajuk CORS di semua permintaan Anda. Untuk informasi lebih lanjut, Anda dapat merujuk ke dokumentasi kor
https://www.npmjs.com/package/cors
sumber
sumber
Tambahkan kode berikut di app.js dari NODEJ Restful api untuk menghindari kesalahan "Access-Control-Allow-Origin" di sudut 6 atau kerangka kerja lainnya
sumber
Anda dapat menggunakan "$ http.jsonp"
ATAU
Di bawah ini adalah pekerjaan untuk chrome untuk pengujian lokal
Anda perlu membuka krom Anda dengan perintah berikut. (Tekan jendela + R)
Catatan: Chrome Anda tidak boleh terbuka. Ketika Anda menjalankan perintah ini chrome akan terbuka secara otomatis.
Jika Anda memasukkan perintah ini di command prompt kemudian pilih direktori instalasi chrome Anda kemudian gunakan perintah ini.
Di bawah kode skrip untuk chrome terbuka di MAC dengan "--allow-file-access-from-file"
opsi kedua
Anda bisa menggunakan open (1) untuk menambahkan flag: open -a 'Google Chrome' --args --allow-file-access-from-files
sumber
sumber