Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何构造一个express应用程序,在覆盆子Pi3上运行光带_Javascript_Node.js_Express_Raspberry Pi - Fatal编程技术网

Javascript 如何构造一个express应用程序,在覆盆子Pi3上运行光带

Javascript 如何构造一个express应用程序,在覆盆子Pi3上运行光带,javascript,node.js,express,raspberry-pi,Javascript,Node.js,Express,Raspberry Pi,我在树莓pi上设置了一个节点服务器,在Adafruit Dotstar光带上显示一系列颜色。该功能的工作原理如下:我向localhost:8000/fade发出HTTP请求,服务器通过运行fade.js文件做出响应,该文件是一个无限循环,通过灯条上的不同颜色淡出。不幸的是,我希望能够退出此命令并通过另一个对localhost:8000/off的请求关闭灯带 我尝试了child\u进程包来运行“淡入淡出”代码,同时也监听新的请求。但是,我无法终止“淡出”过程 下面是我的app.js代码。有没有关于

我在树莓pi上设置了一个节点服务器,在Adafruit Dotstar光带上显示一系列颜色。该功能的工作原理如下:我向
localhost:8000/fade
发出HTTP请求,服务器通过运行fade.js文件做出响应,该文件是一个无限循环,通过灯条上的不同颜色淡出。不幸的是,我希望能够退出此命令并通过另一个对
localhost:8000/off
的请求关闭灯带

我尝试了
child\u进程
包来运行“淡入淡出”代码,同时也监听新的请求。但是,我无法终止“淡出”过程

下面是我的app.js代码。有没有关于如何终止child_进程,或者以其他方式重新构造代码以实现相同目标的建议?我真的只需要能够连续运行“淡入淡出”代码,同时响应新的请求

p、 这是我的第一个JS项目,所以放轻松!感谢您的帮助

app.js:

var express     = require('express'),
    app         = express();

app.get('/', function (req, res) {
  res.send('App is responding to requests');
});

app.get('/fade', function (req, res) {
  var fork = require('child_process').fork;
  child = fork('./sequences/fade.js');
});

app.get('/off', function (req, res) {
  var fork = require('child_process').fork;
  child = fork('./sequences/off.js');
});

app.listen(8000, function () {
  console.log('Example app listening on port 8000!')
})
fade.js:

console.log("running fade.js");
var dotstar     = require('dotstar'),
    SPI         = require('pi-spi'),
    sleep       = require('sleep');

spi = SPI.initialize('/dev/spidev0.0');
const ledStripLength = 30;

const ledStrip = new dotstar.Dotstar(spi, {
  length: ledStripLength
});

while(1) {
    fade(); //where fade is a long sequence of colors
};

叹息:。。。进程必须显式地处理此信号才能工作


因此,如果您想关闭而不在分叉端处理它,或者
SIGKILL
只杀死那个mofo。

太棒了!这很有效。谢谢你的帮助。我以前尝试过child.kill方法,但它不起作用,因为child未在外部作用域中定义。在路由之外定义子节点就成功了。
var child; // Outer scope, available in both functions.

app.get('/fade', function (req, res) {
  var fork = require('child_process').fork;
  child = fork('./sequences/fade.js');
});

app.get('/off', function (req, res) {
  // (might be a good idea to check if child exists and is running first...)
  child.kill('SIGHUP');
});