Nodejs express cors error, заголовки установлены как на клиенте, так и на сервере - PullRequest
0 голосов
/ 21 января 2020

Я создал приложение NodeJS / ExpressJS и развернул его в Heroku, у меня также есть развернутая базовая страница c html, развернутая в другом домене, так как я буду использовать ее в реальный мир. Но я продолжаю получать одни и те же ошибки Cors, независимо от того, что я пытаюсь.

Вот мое приложение узла

const express = require('express');
const fs = require('fs');
const http = require('http');
const path = require('path');
const handlebars = require('handlebars');
const puppeteer = require('puppeteer');
const bodyParser = require('body-parser');
const app = express();

require('dotenv').config()

app.use(express.json());
app.unsubscribe(bodyParser.json());

app.set('view engine', 'html')

app.use(function(req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Headers', 'Origin,X-Requested-With,Content-Type,Accept,content-type,application/json');
    next();
});

app.all('/export/pdf', (req, res) => {
    (async () => {
        // PDF Generator Logic....
        res.send(buffer)
    })()
})

const server = http.createServer(app);
server.listen(process.env.PORT || 3000, err => {
    console.log(err || `Server listening on port ${process.env.PORT}`);
});

Это клиентская сторона, которая отправляет запрос ..

function handlePDF(body) {
    var req = new XMLHttpRequest();
    var url = 'mydomain.com/export/pdf';
    body = JSON.stringify(body);
    req.open("POST", url, true);
    req.responseType = 'blob';
    req.setRequestHeader('Access-Control-Allow-Origin', '*');
    req.setRequestHeader('Content-Type', 'application/json');
    req.onload = function (e) {
        if (req.readyState === 4) {
            if (req.status === 200) {
                console.log(req);
            } else {
                console.error(req.statusText);
            }
        }
    };
    req.onerror = function (e) {
        console.error(req.statusText);
    }
    req.send(body);
}

Как видите, заголовок запроса установлен на стороне клиента, а также в express ДО моих маршрутов, как объяснено в аналогичных вопросах.

Я также пытался использовать пакетные cors npm и передавать его в мой маршрут, как описано в документации, но это также не сработало. Я попытался удалить заголовок из запроса на стороне клиента, думая, что он будет обработан полностью на стороне сервера, так как у меня есть полный контроль над этим, что также не работает.

Я чувствую, что перепробовал все, может кто-нибудь с чуть большим количеством узлов / express опыта увидеть, где я иду не так?

1 Ответ

0 голосов
/ 22 января 2020

Я получил отправленный вами код для работы, используя

var url = "http://example.com/export/pdf"

вместо

var url = "example.com/export/pdf

Кроме того, настройку CORS заголовки на клиенте не нужны. CORS - это функция безопасности, реализованная браузером. Это зависит только от заголовков, отправленных сервером, а не от заголовка, отправленного клиентом. Установка их на клиенте бессмысленна. Для получения дополнительной информации это объясняет это превосходно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...