如何从 NodeJS 端点获取 jQuery AJAX 结果?
How to get jQuery AJAX result from NodeJS endpoint?
我成功地 ajax 调用了我设置的端点。我将原始证书作为 JSON 发送给它,后端对其进行解码。现在,我可以用 console.log
调出解码结果,但我不知道如何 return 它作为结果。
Ajax 通话:
$("#decoderSubmit").on('click', function() {
var body = $('#csr').val();
if (!(body.match(new RegExp("-----BEGIN", 'i')))) {
$('#csrFail').show();
} else {
if (body.match(new RegExp("REQUEST", 'i'))) {
$("#csrAlert").show();
} else
$("#certAlert").show();
decode(body);
}
});
function decode(body) {
$.ajax({
type: 'POST',
url: '/api/decoder',
data: {
body: body //cert/csr
},
dataType: 'JSON',
timeout: 4500,
success: callback,
error: fail
});
function callback(data) {
//decodedText = data;
alert(data);
//$("#decodeBody").append('<div>' + data + '</div>');
}
function fail(request, status, err) {
console.log(err);
}
}
NodeJS 端点:
router.route('/decoder')
//console.log('test');
.post(function(req, res) {
let body = req.body.body;
decode(body, function(result) {
res.json(result);
});
function decode(cert) {
let file = randCertFileName(); // Get a random filename for out cert
var result;
fs.writeFile(file, cert, function(err) { // Write the cert to a file
if (err) {
console.error("Error writing certificate: " + error);
throw err;
} else {
execute('certutil -dump ' + file, function(out) { // Execute the certutil dump command
//console.log(out);
result = out;
fs.unlink(file); // Delete the certificate file
//return result;
});
}
});
}
});
正如我所说,如果我执行 console.log(out)
我可以得到转储,否则就不行。
我已经浏览了许多 SO 帖子,从我所看到的来看,我认为我正在正确地进行 AJAX 调用,所以问题可能出在我的端点上。
提前致谢!
在您的 nodejs 端点中,您使用两个参数调用 decode
函数,首先是主体,然后是回调。但是你的函数声明只接受一个参数。你必须改变它并且不要忘记总是 return 回调 :
function decode(cert, callback) {
let file = randCertFileName();
var result;
fs.writeFile(file, cert, function(err) {
if (err) {
console.error("Error writing certificate: " + error);
return callback(err);
}
execute('certutil -dump ' + file, function(out) {
result = out;
fs.unlink(file);
return callback(null, result); // first argument is err
});
});
}
现在,您可以得到结果了:
.post(function(req, res) {
const body = req.body.body;
decode(body, function(err, result) { // don't forget the two arguments,
// first error, then result.
if (err)
throw err;
res.json(result);
});
});
我成功地 ajax 调用了我设置的端点。我将原始证书作为 JSON 发送给它,后端对其进行解码。现在,我可以用 console.log
调出解码结果,但我不知道如何 return 它作为结果。
Ajax 通话:
$("#decoderSubmit").on('click', function() {
var body = $('#csr').val();
if (!(body.match(new RegExp("-----BEGIN", 'i')))) {
$('#csrFail').show();
} else {
if (body.match(new RegExp("REQUEST", 'i'))) {
$("#csrAlert").show();
} else
$("#certAlert").show();
decode(body);
}
});
function decode(body) {
$.ajax({
type: 'POST',
url: '/api/decoder',
data: {
body: body //cert/csr
},
dataType: 'JSON',
timeout: 4500,
success: callback,
error: fail
});
function callback(data) {
//decodedText = data;
alert(data);
//$("#decodeBody").append('<div>' + data + '</div>');
}
function fail(request, status, err) {
console.log(err);
}
}
NodeJS 端点:
router.route('/decoder')
//console.log('test');
.post(function(req, res) {
let body = req.body.body;
decode(body, function(result) {
res.json(result);
});
function decode(cert) {
let file = randCertFileName(); // Get a random filename for out cert
var result;
fs.writeFile(file, cert, function(err) { // Write the cert to a file
if (err) {
console.error("Error writing certificate: " + error);
throw err;
} else {
execute('certutil -dump ' + file, function(out) { // Execute the certutil dump command
//console.log(out);
result = out;
fs.unlink(file); // Delete the certificate file
//return result;
});
}
});
}
});
正如我所说,如果我执行 console.log(out)
我可以得到转储,否则就不行。
我已经浏览了许多 SO 帖子,从我所看到的来看,我认为我正在正确地进行 AJAX 调用,所以问题可能出在我的端点上。
提前致谢!
在您的 nodejs 端点中,您使用两个参数调用 decode
函数,首先是主体,然后是回调。但是你的函数声明只接受一个参数。你必须改变它并且不要忘记总是 return 回调 :
function decode(cert, callback) {
let file = randCertFileName();
var result;
fs.writeFile(file, cert, function(err) {
if (err) {
console.error("Error writing certificate: " + error);
return callback(err);
}
execute('certutil -dump ' + file, function(out) {
result = out;
fs.unlink(file);
return callback(null, result); // first argument is err
});
});
}
现在,您可以得到结果了:
.post(function(req, res) {
const body = req.body.body;
decode(body, function(err, result) { // don't forget the two arguments,
// first error, then result.
if (err)
throw err;
res.json(result);
});
});