我尝试了大约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机器上本地一切都很好
答案 0 :(得分:1)
你应该在bodyParser之前使用cors并允许它用于PUT / DELETE。
// Add cors
app.use(cors());
app.options('*', cors()); // enable pre-flight
app.use(bodyParser.json());
答案 1 :(得分:0)
试试这个。在你的user.js文件中使用router.post而不是app.post。
router.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 = router;
另外我建议在server.js文件中使用bodyparser。所以你不需要在每个文件中使用它。
答案 2 :(得分:0)
对于像我这样的其他人尝试尝试修复POST cors问题2小时,请再次检查您的POST请求选项。
对我来说,这是 header:{...} 的小错字,而不是 header( s ):{...} >在POST选项中,使用cors配置的快递服务器允许所有来源发出受限访问错误“ Access-Control-Allow-Origin”。
答案 3 :(得分:0)
这可能对像我这样的其他人有帮助:
一开始我认为这是服务器端的问题,但是后来cors错误的原因成了我的前端。我正在将请求发送到localhost:3000/api
而不是http://localhost:3000/api
就这样
答案 4 :(得分:0)
应用“cors”中间件后。您应该在“localhost:”之前附加“http://”。在网址中
axios.get("http://localhost:8080/api/getData")
.then(function (response) {
this.items= response.data;
}).catch(function (error) {
console.log(error)
});