2015-09-10 4 views
1

У меня есть интерактивный скрипт python, который говорит с моим 3D-принтером. Если открыть этот скрипт, я набираю две команды, которые выводит информацию стандартный вывод:NodeJS с интерактивным скриптом Express и python

  1. подключения к принтеру (USB) на 250000 бод
  2. Получить температуру

Я хотел соединение с принтером должно оставаться навсегда, потому что в будущем я могу снова подключиться к сценарию для опроса для ETA текущего задания на печать.

Затем NodeJS с Express позволяет мне создать простой веб-API, который связывается с этим скриптом, используя child process, но я получаю много ошибок.

Мой код:

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'); 
}); 

Я получаю ошибки, строка 29: Ошибка: Не удается установить заголовки после их отправки.

Что я делаю неправильно?

+0

что линия 29? и почему вы хотите написать свой сервер в js, когда вы можете сделать это? – taesu

+0

Строка 29 - res.json ({printer_status: data}); Я использую js, потому что node + express - самый простой способ иметь API для отдыха. Я также рассмотрел использование Flask, но я не уверен. Чтобы вы посоветовали? – Axel

+0

Django или Flask. ваша ошибка [дубликат] (http://stackoverflow.com/questions/7042340/node-js-error-cant-set-headers-after-they-are-sent?answertab=active#tab-top) anyways – taesu

ответ

0

Это Экспресс сообщает, что он не может изменить содержимое HTTP-заголовка после его отправки клиенту. В какой-то момент ваша система пытается что-то сделать в заголовке, экспресс объясняет, что он не может до него добраться. Проблема, скорее всего, не в коде выше.

Я боролся с этим в течение нескольких дней. Одна сложная вещь, которую нужно освоить с помощью Node, - это способ обработки событий, и КОГДА вы можете делать что-то.

Пожалуйста, смотрите этот вопрос (255 upvotes так что вы не одиноки), и это должно быть ясно: Error: Can't set headers after they are sent to the client

Смежные вопросы