gpt4 book ai didi

javascript - NodeJS + ExpressJS : Request header field not allowed by Access-Control-Allow-Headers in preflight response

转载 作者:太空宇宙 更新时间:2023-11-04 00:33:50 25 4
gpt4 key购买 nike

我目前有一个 NodeJS + ExpressJS 作为客户端服务器,向后端服务器发出 API 请求。当我发出 API 请求时,出现以下错误:

预检响应中的 Access-Control-Allow-Headers 不允许请求 header 字段firstname。

我尝试了一切方法来允许 CORS,但仍然遇到相同的错误。以下是我的 NodeJS + ExpressJS 客户端服务器的设置方式:

    var express = require('express');
var cors = require('cors');
var path = require('path');
var config = require('../webpack.config.js');
var webpack = require('webpack');
var webpackDevMiddleware = require('webpack-dev-middleware');
var webpackHotMiddleware = require('webpack-hot-middleware');
var app = express();
var compiler = webpack(config);

app.use(cors());

app.use(webpackDevMiddleware(compiler, {noInfo: true, publicPath: config.output.publicPath}));

app.use(webpackHotMiddleware(compiler));

app.use(express.static('./dist'));

app.use('/', function (req, res) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.sendFile(path.resolve('client/index.html'))
})

var port = 3000;

app.listen(port, function(error) {
if (error) throw error;
console.log("Express server listening on port", port);
});

可能是什么问题?目前唯一可行的方法是下载 https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en并启用它,那么我就不会收到错误并且API请求会成功。

编辑 - 我如何发出 API 请求

  logInUser(userCredentials) {

var userCredsBody = {
'firstname': `${userCredentials.username}`,
'password': `${userCredentials.password}`
}

var configuration = {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(userCredsBody)
}

return function(dispatch) {
fetch('https://serverapi.com:8080/userInfo', configuration)
.then(response => response.json())
.then(response => {
console.log('Successful and ', response)
})
.catch((error) => {
console.log("Error: ", error)
})
}

最佳答案

更改 header 顺序。

使用这样的东西:

var express = require('express');
//This is not longer required, unless you want to disable CORS
//var cors = require('cors');
var path = require('path');
var bodyParser = require('body-parser');
var config = require('../webpack.config.js');
var webpack = require('webpack');
var webpackDevMiddleware = require('webpack-dev-middleware');
var webpackHotMiddleware = require('webpack-hot-middleware');
var app = express();
var compiler = webpack(config);
//The same, no longer required
//app.use(cors());

app.use(webpackDevMiddleware(compiler, {noInfo: true, publicPath: config.output.publicPath}));

app.use(webpackHotMiddleware(compiler));

app.use(express.static('./dist'));
//Add bodyParser to parse all body as JSON
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

function setupCORS(req, res, next) {
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'X-Requested-With, Content-type,Accept,X-Access-Token,X-Key');
res.header('Access-Control-Allow-Origin', '*');
if (req.method === 'OPTIONS') {
res.status(200).end();
} else {
next();
}
}
app.all('/*', setupCORS);

app.use('/', function (req, res) {
res.sendFile(path.resolve('client/index.html'))
});

var port = 3000;

app.listen(port, function(error) {
if (error) throw error;
console.log("Express server listening on port", port);
});

现在您有一个中间件为每个请求设置 CORS。

如果您想在单个路由上禁用/启用cors,也许您需要更改

app.all('/*', setupCORS);

仅限您想要使用 CORS 配置设置的路由。

我添加了body-parser middleware.

关于javascript - NodeJS + ExpressJS : Request header field not allowed by Access-Control-Allow-Headers in preflight response,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39988778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com