gpt4 book ai didi

Node.js + Express + Cors 不工作 : pending options requests

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

我尝试了大约 10 个不同的选项,但无法让我的 POST 请求开始工作,而是有选项请求处于待处理状态且永远不会完成

server.js

var express = require('express');
var path = require('path');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var cors = require('cors');

var app = express();

app.use(cors());

var allowCrossDomain = function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With, Accept');

// intercept OPTIONS method
if ('OPTIONS' == req.method) {
res.send(200);
} else {
next();
}
};
app.use(allowCrossDomain);

app.options('*', cors());

app.use(require('./routes/order-templates.js'));
app.use(require('./routes/statuses.js'));
app.use(require('./routes/fields.js'));
app.use(require('./routes/users.js'));
app.use(require('./routes/groups.js'));
app.use(require('./routes/upload.js'));
app.use(require('./routes/feedback.js'));

app.use(require('./routes/order.js'));

app.use(express.static('public'));

var mongoDB = 'mongodb://localhost/ior';

mongoose.connect(mongoDB, {
useMongoClient: true
});

app.get('*', function (request, response) {
response.sendFile(path.resolve(__dirname, 'public', 'index.html'))
})

app.listen(3000, function () {
console.log('Fired at ' + Date());
});

users.js

var express = require('express');
var router = express.Router();

var User = require('../model/user.js');
var bodyParser = require('body-parser');

var app = express();

var cors = require('cors')

var corsOptions = {
origin: 'http://188.225.82.166:3000/',
optionsSuccessStatus: 200
}

app.use(cors())
app.use(bodyParser.json());

app.options('/users/auth/', cors(corsOptions))
app.post('/users/auth/', cors(), function (req, res, next) {
User.findOne({"mail": req.body.mail, "password": req.body.password}, function (err, user) {
if (err) throw err;
if (user == undefined) {
res.send({"result": "error" })
res.sendStatus(200)
} else {
res.send({"result": "ok", "_id": user._id, "type": user.type })
}
});
})

module.exports = app

如果我这样做

app.use(cors());

app.use(function(req, res, next) {
console.log('After CORS ' + req.method + ' ' + req.url);
next();
});

server.js中我明白了

After CORS GET /
After CORS GET /bundle.js
After CORS GET /bootstrap.css.map
After CORS GET /favicon.ico

触发发布请求后,控制台中不会打印任何内容。还值得一提的是,只有当我使用 ubuntu 部署到服务器时才会出现该问题。在本地 mac os 机器上一切都很好

最佳答案

您应该在 bodyParser 之前使用 cors,并允许它进行 PUT/DELETE。

// Add cors
app.use(cors());
app.options('*', cors()); // enable pre-flight
app.use(bodyParser.json());

关于Node.js + Express + Cors 不工作 : pending options requests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46742605/

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