Я пытаюсь создать веб-сервер в node.js, который будет поддерживать междоменные сценарии, но при этом будет предоставлять статические файлы из общедоступного каталога. Я использую express.js и не совсем уверен, как разрешить междоменный скриптинг ( Access-Control-Allow-Origin: *
).
Я видел этот пост , который мне не показался полезным.
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);
"Access-Control-Allow-Origin", "*"
делает ваш API интересным для фишинговых приложений. Рассмотрите возможность разрешения только известного происхождения.Ответы:
Проверять, выписываться пример с enable-cors.org :
Первый вызов (
app.all
) должен быть выполнен перед всеми другими маршрутами в вашем приложении (или, по крайней мере, теми, которые вы хотите включить CORS).[Редактировать]
Если вы хотите, чтобы заголовки отображались и для статических файлов, попробуйте это (убедитесь, что это перед вызовом
use(express.static())
:Я проверил это с вашим кодом и получил заголовки активов из
public
каталога:Вы, конечно, можете упаковать функцию в модуль, чтобы сделать что-то вроде
источник
use
ИНГapp.router
до того,express.static
что она не изменяет заголовки для статических файлов; в любом случае, я обновил свой ответ, чтобы он работал.После решения @Michelle Tilley, по-видимому, сначала это не сработало для меня. Не уверен, почему, возможно, я использую хром и другую версию узла. После внесения некоторых незначительных изменений он теперь работает для меня.
Если кто-то сталкивается с подобной проблемой, как моя, это может быть полезно.
источник
Попробуйте это cors npm modules.
Этот модуль предоставляет множество функций для точной настройки параметров cors, таких как белый список доменов, включение cors для конкретных API и т. Д.
источник
Я использую это:
этот код предполагает, что ваши контроллеры находятся в каталоге контроллеров. каждый файл в этом каталоге должен выглядеть примерно так:
источник
Рекомендуем использовать модуль cors express. Это позволяет вам заносить домены в белый список, разрешать / ограничивать домены специально для маршрутов и т. Д.
источник
Вы должны установить
Access-Control-Allow-Credentials: true
, если вы хотите использовать «cookie» через «Учетные данные»источник
});
Добавьте этот код в свой файл index.js или server.js и измените разрешенный исходный массив в соответствии с вашими требованиями.
источник
Еще один шаг, который мне нужно было сделать, - это переключить мой URL-адрес с
http://localhost
наhttp://127.0.0.0
источник