2015-09-07 7 views
0

J'essaie d'utiliser le module webshot pour charger des pages côté serveur, les capturer et les renvoyer au navigateur en tant que fichier PNG. Je l'ai cependant rencontré un message d'erreur qui dit:NPM-webshot: Impossible de définir les en-têtes après leur envoi

Error: Can't set headers after they are sent.

J'ai eu ce message tout en essayant de composer un code à base des exemples.

app.post('/api/downloadPng', function(req, res) { 

    var renderStream = webshot('google.com'); 
    renderStream.on('data', function(data) { 
     res.send(data) 
    }); 
    }); 

Je suis venu à la conclusion que, puisqu'il est un flux, le module tente d'envoyer plus de données une fois qu'il a déjà été ouvert, et le noeud ne permet pas. Donc, ma question est: Comment puis-je déclencher une fonction après que WebShot soit complètement terminé avec le rendu?

Répondre

0

Vous devriez utiliser res.write au lieu du res.send habituel puisque le premier peut être appelé plusieurs fois pour la même réponse. Assurez-vous juste d'écrire les en-têtes avant de commencer à envoyer des données:

res.writeHead(200, { 'Content-Type': 'text/plain' }); 
res.write(...); 
res.write(...); 
res.end(); 
+0

Veuillez donner un exemple, y compris l'écriture des en-têtes. – martin

+0

Si vous ouvrez le lien, vous verrez un exemple juste en dessous de la documentation, StackOverflow est à l'aide, pas un endroit pour demander une solution – gfpacheco