Saya mencoba membangun server web di node.js yang akan mendukung skrip lintas domain, sambil tetap menyediakan file statis dari direktori publik. Saya menggunakan express.js dan tidak begitu yakin cara mengizinkan skrip lintas domain ( Access-Control-Allow-Origin: *
).
Saya melihat posting ini , yang menurut saya tidak berguna.
var express = require('express')
, app = express.createServer();
app.get('/', function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
app.configure(function () {
app.use(express.methodOverride());
app.use(express.bodyParser());
app.use(app.router);
});
app.configure('development', function () {
app.use(express.static(__dirname + '/public'));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function () {
var oneYear = 31557600000;
// app.use(express.static(__dirname + '/public', { maxAge: oneYear }));
app.use(express.static(__dirname + '/public'));
app.use(express.errorHandler());
});
app.listen(8888);
console.log('express running at http://localhost:%d', 8888);
Jawaban:
Lihat contoh dari enable-cors.org :
Panggilan pertama (
app.all
) harus dilakukan sebelum semua rute lain di aplikasi Anda (atau setidaknya yang Anda inginkan untuk mengaktifkan CORS).[Sunting]
Jika Anda ingin header muncul untuk file statis juga, coba ini (pastikan sebelum panggilan ke
use(express.static())
:Saya menguji ini dengan kode Anda, dan mendapatkan header pada aset dari
public
direktori:Anda dapat, tentu saja, mengemas fungsi menjadi modul sehingga Anda dapat melakukan sesuatu seperti
sumber
use
ingapp.router
sebelumexpress.static
bahwa hal itu tidak mengubah header untuk file statis; bagaimanapun juga, saya telah memperbarui jawaban saya agar berfungsi.Mengikuti solusi @Michelle Tilley, tampaknya itu tidak berhasil untuk saya pada awalnya. Tidak yakin mengapa, mungkin saya menggunakan chrome dan versi node yang berbeda. Setelah melakukan beberapa perubahan kecil, ini berfungsi untuk saya sekarang.
Jika seseorang menghadapi masalah yang sama dengan saya, ini mungkin bisa membantu.
sumber
Cobalah untuk ini kor modul NPM.
Modul ini menyediakan banyak fitur untuk menyempurnakan pengaturan kors seperti daftar putih domain, mengaktifkan kors untuk apis tertentu, dll.
sumber
Saya menggunakan ini:
kode ini mengasumsikan bahwa pengontrol Anda terletak di direktori pengontrol. setiap file di direktori ini harus seperti ini:
sumber
Rekomendasikan untuk menggunakan modul cors express. Ini memungkinkan Anda untuk memasukkan domain ke dalam daftar putih, mengizinkan / membatasi domain secara khusus untuk rute, dll.,
sumber
Anda harus mengatur
Access-Control-Allow-Credentials: true
, jika ingin menggunakan "cookie" melalui "Kredensial"sumber
});
Tambahkan kode ini di file index.js atau server.js Anda dan ubah array asal yang diizinkan sesuai dengan kebutuhan Anda.
sumber
Satu langkah tambahan yang perlu saya lakukan adalah mengalihkan URL saya dari
http://localhost
menjadihttp://127.0.0.0
sumber