Я создал приложение 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 опыта увидеть, где я иду не так?