NodeJS - только запрос OPTIONS отправляется в REST API, POST или GET не следует (Cloudflare) - PullRequest
0 голосов
/ 27 августа 2018

Когда мой веб-сайт вызывает API REST (код ниже), выполняется только запрос OPTIONS, запрос POST или GET не выполняется.Запрос OPTIONS успешно проходит белый список CORS.Запрос POST или GET не регистрируется, он также не блокируется белым списком.Странно то, что запрос Google Recaptcha работает, все третьи сайты, кроме моего.API работает в том же домене, что и веб-сайт, только другой порт.

Мой сайт использует Cloudflare, Cloudflare постоянно меняет IP-адреса входящих запросов.Мой сайт, его IP-адрес - ipv6 после того, как он прошел через прокси-сервер cloudflare.Веб-сайт, на котором указан его ip, указан в виде списка адресов ipv6.

const whitelist = ["*all the ip addresses"];

var corsOptions = {
    origin: (origin, callback) => {
        if (whitelist.indexOf(origin) !== -1) {
            callback(null, true)
        } else {
            callback('Not allowed by CORS');
        }
    }
};

const app = express();

mongoose.connect(*mongodb credentials*);

app.use((req, res, next) => {
    req.headers.origin = req.headers['cf-connecting-ip'] || req.headers['x-forwarded-for'] || req.connection.remoteAddress;
    next();
});

app.use(morgan('combined'));
app.use(cors(corsOptions));
app.use(bodyParser.json({type: '*/*', limit: '2mb'}));
app.use(bodyParser.urlencoded({limit: '2mb', extended: true}));

app.use(*routing*);

module.exports = app;

1 Ответ

0 голосов
/ 27 августа 2018

app.use только для регистрации промежуточного программного обеспечения.вам нужно указать маршрутизацию для каждого метода, который вы используете.app.get, app.put, app.delete и т. д. Вы также можете использовать app.all для всех методов. Вы можете найти больше информации здесь: https://expressjs.com/en/guide/routing.html

...