Nodejs 表示 cors 错误,标头在客户端和服务器中都设置



我已经构建了一个NodeJS/ExpressJS应用程序,并将其部署到Heroku,我也在另一个域上部署了一个非常基本的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 中设置了请求标头,在我的路由之前,如类似问题中所述。

我也尝试使用 npm 包 cors 并将其传递到我的路由中,如其文档中所述,但这也没有用。 我尝试从客户端请求中删除标头,认为它将完全在服务器端处理,因为我可以完全控制它,这也不起作用。

我觉得我已经尝试了一切,任何有更多节点/快速经验的人都能看到我哪里出错了吗?

我得到了你发布的代码,使用

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

而不是

var url = "example.com/export/pdf

此外,无需在客户端上设置 CORS 标头。CORS 是浏览器实现的安全功能。它仅取决于服务器发送的标头,而不取决于客户端发送的标头。在客户端上设置它们是没有意义的。有关更多信息,这很好地解释了它。

相关内容

最新更新