node.js - NodeJS - 仅 OPTIONS 请求发送到 REST API,POST 或 GET 不会遵循 (Cloudflare)

标签 node.js rest cors ip cloudflare

当我的网站调用 REST api(代码如下)时,只有 OPTIONS 请求通过,POSTGET 请求不会遵循。 OPTIONS 请求成功通过 CORS 白名单。 POSTGET 请求不会被记录,也不会被白名单阻止。奇怪的是,谷歌 Recaptcha 请求有效,所有第三个网站都有效,除了我的。 API 与网站在同一域上运行,只是另一个端口。

我的网站正在使用 Cloudflare,Cloudflare 会不断更改传入请求的 IP 地址。我的网站通过cloudflare代理后他的ip地址是ipv6。该网站的 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

关于node.js - NodeJS - 仅 OPTIONS 请求发送到 REST API,POST 或 GET 不会遵循 (Cloudflare),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52034699/

相关文章:

java - 使用 rest web 服务的 spring security 登录

java - 如何获取部署在 Microsoft Azure 的 Web 服务中的源 IP

node.js - NestJS、GraphQL、类验证器 - 在验证方法中访问请求对象

mysql - NodeJS 和 MySQL,处理行

mysql - REST API、OAuth2 和身份验证错误

asp.net - AngularJS $http.POST 方法 405 错误

javascript - 通过修改 HTTP header 使用不带 CORS 的 XMLHttpRequest?

f# - 如何在suave中处理 "OPTIONS"请求

sql - 使用所需的 : true generates invalid join 对嵌套包含进行 Sequelize

node.js - 使用 ExcelJS 使用流修改现有 Excel 文件