我有一个使用express的节点实例。它调用JAVA后端。当我收到响应时,我会检查是否有内容处理标头,并相应地对文件类型作出反应。
response.body的内容是二进制内容中的pdf。使用内容类型标题" application / pdf; charset = UTF-8"。我还收到一个Content-Transfer-Encoding标头设置为二进制文件。
如果我直接从REST客户端调用我的JAVA后端,一切都很好,我可以查看原始正文或下载文件。
如果我使用节点,则PDF为空白。但是页面数量正确。
以下是我如何将响应转发给前端。
res.status(response.statusCode).set('content-disposition', response.contentDisposition).set('Content-Type', response.contentType).send(response.body);
在我甚至可以访问响应之前,Express是否有可能将其转换为某种默认编码?
我想要做的就是从我的java后端获取身体响应,然后调整标题并将其发送回前端。
谢谢
修改 这是我传递给我的请求函数的选项
method=GET, user=username, pass=password, uri=http://appsjava-veo01.hostname:8081/VEO/r/pap/pap5001/produire/311, Content-Type=*/*, Accept=*/*
调用我的http处理程序,并在回调中发回响应
httpRequest(options, req, res, function(err, response){
if (err){
return next(err);
}else{
if (response.jsonResponse){
res.status(response.statusCode).set('Content-Type', 'application/json').send(response.jsonResponse);
}else{
if (response.contentDisposition){
res.status(response.statusCode).set('Content-Disposition', response.contentDisposition).set('Content-Type', response.contentType).send(response.messageHtml);
}else {
res.status(response.statusCode).set('Content-Type', 'application/json').send(JSON.stringify({
success: response.success,
message: response.message,
messageHtml: response.messageHtml,
dateJour: response.dateJour,
usager: response.usager
}));
}
}
}
});
var httpRequest = function(options, req, res, callback) {
var errorMsg, dateJour;
ASQ(function (done) {
request(options, function (error, response) {
if (!response) {
done.fail(error);
} else {
done(response);
}
});
})
.then(function (done, response) {
var bodyResponse,
httpResponse,
jsonResponse,
contentDisposition = response.headers['content-disposition'],
usager = (req.session.cas) ? req.session.cas.user : 'nocas';
dateJour = new Date().toJSON();
//Validation et aiguillage selon les status code http
if (response.statusCode === 401) {
req.session.pt = '';
httpResponse = {
'statusCode': 401,
'success': false,
'message': '401 - Authorization requise',
'messageHtml': response.body,
'dateJour': dateJour,
'jsonResponse': null,
'usager': usager
};
return callback(null, httpResponse);
} else if (response.statusCode.toString().charAt(0) === '2' || response.statusCode === 406 || response.statusCode === 428) {
if (contentDisposition) {
var contentType = utils.extractContentType(contentDisposition);
httpResponse = {
'statusCode': response.statusCode,
'success': true,
'message': 'Téléchargement du fichier',
'messageHtml': response.body,
'dateJour': dateJour,
'jsonResponse': null,
'contentDisposition': contentDisposition,
'contentType': contentType,
'usager': usager
};
return callback(null, httpResponse);
...................