2015-09-10 2 views
1

J'ai un script interactif en python qui parle avec mon imprimante 3D. Si j'ouvre ce script, je tape deux commandes qui envoie des informations à stdout:NodeJS avec script interactif Express et python

  1. se connecter à l'imprimante (USB) à 250000 baud
  2. obtenir la température

Je voudrais la connexion avec l'imprimante pour rester en permanence, parce que dans le futur, je peux me connecter à nouveau au script pour interroger l'ETA du travail d'impression en cours. Puis, NodeJS avec Express me permet de créer une API web simple qui communique avec ce script en utilisant un child process, mais je reçois beaucoup d'erreurs.

Mon code:

var express = require('express'); 
var app = express(); 
var child_process = require('child_process'); 
spawn = child_process.spawn; 

var n = child_process.spawn('/home/pi/virtualenvs/printrun/bin/python', ['-i','-u','/home/pi/projects/printrun/Printrun/pronsole.py']); 
n.stdin.write('connect /dev/ttyACM0 250000'); 
n.stdin.write('\n'); 

app.get('/printer_temp', function (req, res) { 
     n.stdin.write('gettemp'); 
     n.stdin.write('\n'); 

     n.stdout.on('data', function(data){ 
       res.json({printer_status: data}); //I should get kind of like an "OK", with a bunch of other lines. 
     }); 

}); 


var server = app.listen(3000, function() { 
     var host = server.address().address; 
     var port = server.address().port; 
     console.log('Starting server'); 
}); 

Je reçois des erreurs Ligne 29: Erreur: Impossible de définir les en-têtes après leur envoi.

Qu'est-ce que je fais mal?

+0

ce qui est la ligne 29? et pourquoi voulez-vous écrire votre serveur dans js quand vous pouvez avoir py le faire? – taesu

+0

La ligne 29 est res.json ({printer_status: data}); J'utilise js car node + express est le moyen le plus simple d'avoir une API de repos. J'ai également envisagé d'utiliser Flask, mais je ne suis pas sûr. Que recommanderais-tu? – Axel

+0

Django ou Flask. votre erreur est [dupliquer] (http://stackoverflow.com/questions/7042340/node-js-error-cant-set-headers-after-they-are-sent?answertab=active#tab-top) de toute façon – taesu

Répondre

0

Ceci est expresse vous indiquant qu'il est incapable de modifier le contenu de l'en-tête HTTP après qu'il a été envoyé au client. À un moment donné, votre système essaie de faire quelque chose à l'en-tête, exprimer explique qu'il ne peut pas y arriver. Le problème le plus probablement pas dans le code ci-dessus.

Je me suis battu pendant quelques jours. Une chose difficile à maîtriser avec Node est la façon dont les événements sont traités et quand vous pouvez faire des choses.

S'il vous plaît voir cette question (255 upvotes si vous n'êtes pas seul) et il devrait être clair: Error: Can't set headers after they are sent to the client