Express правильно установит CORS на локальном хосте, но не на живом сервере

Я пробовал пару вещей, и они оба работают на моем локальном хосте (заголовки присутствуют и правильны), но не на живом сервере, который размещен на Amazon, построенном из образа NodeJS bitnami за обратным прокси-сервером apache.

Конфигурации, которые я пробовал:

1) Установите заголовок ответа вручную для каждого необходимого маршрута (чтобы этот код был в файле маршрутизации):

router.options('/:var1/:var2', function(req, res) {
    res.setHeader("Access-control-allow-origin", "*");
    var db = req.db;
    var data = db.get('data');
    actions.find({"criteria":req.params.var1}, function(err, docs)
    {
            res.send(docs);
    });
});

2) Использовать промежуточное ПО из NPM (этот код находится в app.js):

//Includes/Requirements
var express = require('express');
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var mongodb = require('mongodb');
var monk = require('monk');
var cors = require('cors');
var db = monk('localhost:27017/app');

...

app.use(cors());

Таким образом, при использовании обоих этих методов запросы к localhost:3000 приводят к ожидаемым заголовкам (Access-allow-control-origin:*). Однако, когда я отправляю код на свой рабочий сервер, эти заголовки отсутствуют в ответах.

Любые идеи?


person Josh    schedule 03.05.2014    source источник
comment
Это похоже на проблему с вашим обратным прокси-сервером apache, который не пересылает все заголовки с вышестоящего сервера, а не на проблему с узлом.   -  person furydevoid    schedule 05.05.2014
comment
@furydevoid, спасибо за совет! Не могу поверить, что это не пришло мне в голову! Я пошел на свой сервер и указал правильный порт для обхода обратного прокси и вуаля: заголовки были там. Спасибо!   -  person Josh    schedule 05.05.2014


Ответы (1)


Я решил это с помощью модуля cors.

var cors = require('cors');
app.use(cors()); // add this line at appropriate place in your code 

затем добавьте app.options('*', cors()); до того, как весь маршрут будет определен или включен в файл server.js/app.js

person Abhimanyu    schedule 16.12.2014