$ Ajax发布请求未等待。 Node.js承诺解决

问题描述 投票:1回答:1

我正在尝试向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;

是否存在“解密”路由在另一个文件中的问题?(路由/列表路由)?

javascript node.js ajax post
1个回答
-1
投票

您的服务器端代码应类似于:(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())。

© www.soinside.com 2019 - 2024. All rights reserved.