我正在尝试向Express服务器发出Ajax发布请求,但在从服务器返回响应时遇到问题。
请求是这样:
.ajax({
url : "https://prefill.xxx.com/decrypt",
type: "POST",
data: sdata2,
dataType: "json",
success: function(resp){
console.log(resp);
},
error:function(err){
console.log(err);
},
complete:function(comp){
console.log('complete');
console.log(comp);
}
});
方法是:
app.post("/decrypt", function (req, res) {
decrypt(req.body.data,ENC_KEY,IV).then(function (resultDec){
res.status(200).send(JSON.stringify(resultDec));
});
}
在邮递员中,我得到了正确的答复,但是在Ajax电话中,我没有。
[当我发回Ajax请求时,响应在我使用该诺言时出现Allow-Origin错误(例如不等待诺言被兑现)。因为当我用没有承诺的字符串对象解决方法时,响应是正确的。
关于我在做什么错的任何想法?
谢谢,
Mihai
以后编辑:
我已经使用了像这样的cors库:
var corsOptions = {
origin: 'https://pages.xxx.com',
optionsSuccessStatus: 200,
};
app.use(cors(corsOptions));
app.options('*', cors());
但是仍然有问题。 Ajax请求可以看到该方法,但是当我在里面做一个Promise时,效果不佳。
以后编辑:
[Error] Origin https://pages.xxx.com is not allowed by Access-Control-Allow-Origin.
[Error] XMLHttpRequest cannot load https://prefill.xxx.com/decrypt due to access control checks.
[Error] Failed to load resource: Origin https://pages.xxx.com is not allowed by Access-Control-Allow-Origin.
以后编辑:
我已添加服务器文件代码:
var express = require('express'); // call express
var app = express(); // define our app using express
var bodyParser = require('body-parser');
var cors = require('cors');
/*let corsOptions = {
origin: function (origin,callback) {
if(origin == "https://pages.xxx.com"){
callback(null, true);
}else{
callback(new Error('Wrong Origin!'));
}
},
optionsSuccessStatus: 200
};
app.use(cors(corsOptions));*/
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "https://pages.xxx.com");
res.header('Access-Control-Allow-Methods', 'DELETE, PUT, GET, POST');
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
app.engine('.html', require('ejs').__express);
app.set('views', __dirname + '/views/');
app.set('view engine', 'html');
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
var port = process.env.PORT || 3000; // set our port
// ROUTES FOR OUR API
// =============================================================================
var router = express.Router(); // get an instance of the express Router
router.get('/', function (req, res) {
res.render('index', {title: 'Express'});
});
var routes = require('./routes/listRoutes'); //importing route
routes(app);
app.use('/api', router);
// START THE SERVER
// =============================================================================
app.listen(port);
console.log('Magic happens on port ' + port);
module.exports = router;
是否存在“解密”路由在另一个文件中的问题?(路由/列表路由)?
您的服务器端代码应类似于:(http://localhost:4000]
let express = require('express');
let cors = require('cors');
let app = express();
let corsOptions = {
origin: function (origin,callback) {
if(origin == "http://localhost:3000"){
callback(null, true);
}else{
callback(new Error('Wrong Origin!'));
}
},
optionsSuccessStatus: 200
}
app.use(cors(corsOptions));
app.post('/',function(req,res){
res.send("It works like a charm");
})
app.listen(4000);
客户端请求(http://localhost:3000):
$.ajax({
url : "http://localhost:4000",
type: "POST",
data: {msg:"test"},
dataType: "json",
success: function(resp){
console.log(resp);
},
error:function(err){
console.log(err);
},
complete:function(comp){
console.log('complete');
console.log(comp);
}
});
根据服务器/客户端URL更改CORS配置。
如果不起作用,请尝试仅使用没有配置的app.use(cors())。