AJAX调用适用于本地但不适用于服务器

时间:2016-06-20 19:33:52

标签: jquery ajax node.js rest

我几乎已经准备好部署应用程序而且遇到了障碍。

我有一个nodejs app(http://sslscanner-ssldecoder.azurewebsites.net/decoder/

当我在本地机器上运行时,一切正常。 但是当我部署它(在Azure上)时,AJAX调用不会发送正文(我认为)。

这是jQuery调用:

$("#decoderSubmit").on('click', function() {

        var body = $('#csr').val();
        var csr;
            decode(body, csr);
    });

    function decode(body, csr) {

        $.ajax({
            type: 'POST',
            url: '/api/decoder',
            data: {
                body: body,
                csr: csr
            },
            dataType: 'JSON',
            timeout: 4500,
            success: callback,
            error: fail


        });

        function callback(data) {
            var csrBody = data.slice(0, 20);
            var certBody = data.slice(0, 12);

            if (!csr) {
                console.log(certBody);
            }
            if (csr) {
                console.log(csrBody);
            }
        }

        function fail(request, status, err) {
            console.log(err);
        }

    }

这是NodeJS端点(/ api / decoder):

router.route('/decoder')

    .post(function(req, res) {

        let body = req.body.body;
        let csr = req.body.csr;
        decode(body, csr, function(err, result) {
            if (err)
                throw err;
            res.json(result);
        });

        function decode(data, type, callback) {
            if (type == 'true') {
                let inFile = randCertFileName();
                var result;
                fs.writeFile(inFile, data, function(err) { // Write the cert to a file
                    if (err) {
                        console.error("Error writing certificate: " + err);
                        return callback(err);
                    }
                });
                execute('openssl req -in ' + inFile + '  -text', function(out) { // Execute the certutil dump command
                    result = out;
                    var hash = crypto.createHash('sha1').update(data).digest('hex');
                    result = result.concat('\n', 'sha1:', hash);
                    hash = crypto.createHash('md5').update(data).digest('hex');
                    result = result.concat('\n', 'md5:', hash);
                    fs.unlink(inFile); // Delete the certificate file
                    return callback(null, result);
                });
            } else if (type == 'false') {
                let inFile = randCertFileName(); // Get a random filename for incoming cert
                var result;
                fs.writeFile(inFile, data, function(err) { // Write the cert to a file
                    if (err) {
                        console.error("Error writing certificate: " + err);
                        return callback(err);
                    }
                });
                execute('openssl x509 -in ' + inFile + '  -text', function(out) { // Execute the certutil dump command
                    result = out;
                    fs.unlink(inFile); // Delete the certificate file
                    return callback(null, result);
                });
            }
        }

    });

在比较服务器上的调用标头和localhost上的调用时,我注意到的一件事是添加了这个额外的标头: " X供电-通过:ASP.NET"

如果这是问题,你能帮我理解如何覆盖吗?

任何和所有帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

我弄明白了这个问题。我的ajax电话没有问题。我忘了我在Windows服务器上运行应用程序,因此OpenSSL命令无效。