NodeJS / Express,在响应正文

时间:2015-06-03 16:14:43

标签: node.js pdf express

我有一个使用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);
                ...................

0 个答案:

没有答案