NodeJS - 只有选项请求被发送到 REST API,POST 或 GET 不遵循 (Cloudflare)



当我的网站调用 REST api(下面的代码(时,只有OPTIONS请求通过,POSTGET请求不遵循。OPTIONS请求成功通过 CORS 白名单。不会记录POSTGET请求,也不会被白名单阻止。奇怪的是,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;

app.use 仅用于注册中间件。 您需要为正在使用的每种方法指定路由。app.get,app.put,app.delete等。 您还可以将 App.all 用于所有方法 您可以在此处找到更多信息:https://expressjs.com/en/guide/routing.html

最新更新