2013-10-29 80 views
2

我需要生成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); 
     }); 
    }); 

回答

2

解決方案

如果你想從服務器返回的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"); 
}); 
1

嘗試使用res.sendref):

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

不錯的嘗試,但不起作用。 – NiLL

+0

@NiLL,有什麼錯誤?數據不是空的,你確定?什麼'generateDoc()。然後(函數(數據){console.log(參數)'show? – krasu

+0

只是空的正文,沒有一個錯誤和正確的標題,但沒有內容類型,數據句柄正確。 – NiLL

0

我用這個:

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

調用done方法來執行的承諾鏈。使用next回調函數作爲錯誤處理程序,以便將錯誤發送到客戶端!確保將json方法綁定到res對象以防止出現錯誤。