如何在ExpressJS中使用Q promises?

时间:2013-10-29 12:34:24

标签: javascript node.js express connect

我需要生成pdf文档。关于pdf进入generateDoc func的所有魔法,它以Buffer数据作为参数返回promise。但Express不会向客户端发送数据,只会发送标头。我做错了什么?

app.get('/', function(req, res) {
        generateDoc().then(function(data) {
            res.set({
                'Content-Type': 'application/pdf',
                'Content-Length': data.length
            });
            res.end(data);
        });
    });

3 个答案:

答案 0 :(得分:2)

<强>解决方案

如果您想从服务器pdf返回,则必须使用binary param作为res.end。

generateDoc().then(function(data) {
    res.set({
        'Content-Type': 'application/pdf',
        'Content-Length': data.length
    });
    res.end(data, 'binary');
}).fail(function (error) {
    res.end(500, "Some error");
});

答案 1 :(得分:1)

尝试使用res.sendref):

app.get('/', function(req, res) {
    generateDoc().then(function(data) {
        ...
        res.send(data);
    });
});

答案 2 :(得分:0)

我用这个:

server.get('/item/:id', function (req, res, next) {
    service.get(req.params.id).
    done(res.json.bind(res), next);
});

调用done方法来执行promise链。使用next回调函数作为错误处理程序,以便将错误发送到客户端!请务必将json方法绑定到res对象以防止出错。