如何在ExpressJS中使用Q承诺?
问题描述:
我需要生成pdf文档。关于pdf进入generateDoc
函数的所有魔法,它以Buffer数据作为参数返回承诺。但Express不会将数据发送到客户端,只有标头。我究竟做错了什么?如何在ExpressJS中使用Q承诺?
app.get('/', function(req, res) {
generateDoc().then(function(data) {
res.set({
'Content-Type': 'application/pdf',
'Content-Length': data.length
});
res.end(data);
});
});
答
解决方案:
如果你想从服务器返回的PDF,则必须使用binary
参数有关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");
});
答
尝试使用res.send
(ref):
app.get('/', function(req, res) {
generateDoc().then(function(data) {
...
res.send(data);
});
});
答
我用这个:
server.get('/item/:id', function (req, res, next) {
service.get(req.params.id).
done(res.json.bind(res), next);
});
调用done
方法来执行的承诺链。使用next
回调函数作为错误处理程序,以便将错误发送到客户端!确保将json
方法绑定到res
对象以防止出现错误。
不错的尝试,但不起作用。 – NiLL
@NiLL,有什么错误?数据不是空的,你确定?什么'generateDoc()。然后(函数(数据){console.log(参数)'show? – krasu
只是空的正文,没有一个错误和正确的标题,但没有内容类型,数据句柄正确。 – NiLL