Articles of 产生

使用生成器函数next()作为node.js中的callback函数

我正在写一些node.js通过串口连接与传感器交互。 读取传感器的代码自然是asynchronous的。 然而,在我的控制代码中,我需要读取一个传感器,根据这个值做一些事情,再读一遍,做一些其他的事情等。为此,我使用如下的自包含testing代码: var main = new Main(); main.next(); function* Main() { var reading = yield readSensor(this.next.bind(this)); console.log(reading); var reading = yield readSensor(this.next.bind(this)); console.log(reading); } function readSensor(callback) { // simulate asynchrounous callback from reading sensor setTimeout(function sensorCallback() { callback('foo'); }, 100); } 所以,我的顺序控制代码是在一个生成器,当它需要读取时产生readSensor() 。 传感器读数完成后,它会调用callback,控制返回到主代码。 我这样做是因为我可能需要根据以前的读数以不同的顺序读取各种传感器。 所以,这里是有问题的部分:我将this.next.bind(this)作为callback传递给asynchronous读取函数。 代码似乎工作时,生成器启用( –harmony_generators ),但我想知道是否有缺陷在这里,我失踪。 我对JS比较新,所以不要害怕指出明显的:)

在node.js中产生subprocess时出错

我试图得到一个小小的ffmpeg转换器服务,并取得了很好的进展。 但是,当涉及到产生转换的实际ffmpeg过程时,我正在打砖墙。 // options.ffmpegopts is an array containing format-specific parameters var args = [ '-y', '"' + options.targetfile + '"' ]; args = options.ffmpegopts.concat(args); var ffmpegProc = spawn('ffmpeg ', args); ffmpegProc.stderr.on('data', function(data) { console.log('stderr: ' + data); }); 执行此代码时,我得到以下控制台输出: stderr: execvp(): No such file or directory 我已经检查了不同的节点版本(0.4.0,0.4.2和0.5.0-pre),没有任何影响。 另一个非常奇怪的行为是,我必须调用spawn,包括一个空格( 'ffmpeg '而不是'ffmpeg' )。 如果我省略这个空间,我得到一个不同的错误( stderr: "/path/to/my/movie.mpeg": no […]

节点child_process.spawn多个命令

我想自动创build和提取密钥库。 我面临的问题是如何使用“ | ”来join命令 符号或类似的解决scheme。 //Original Command var command='keytool -exportcert -storepass mypass -keypass mypass -alias myalias -keystore mykey.keystore | openssl sha1 -binary | openssl base64'; //Arguments for the spawn var keyArgs = [ '-exportcert', '-storepass','mypass', '-keypass','mypass', '-alias','myalias', '-keystore',"myjey.keystore", 'openssl','sha1', '-binary', 'openssl','base64', ]; exec('keytool',keyArgs,{cwd:appCreateFolder+"/"+opt.id+"/Certificates"},function(e){ console.log(chalk.cyan('Key created')); })

child_process在node.js安全/转义中产生

在Node中,我使用了一个模块( GM ),并注意到它使用了child_process模块中的spawn来传递参数给GraphicMagick的convert可执行文件。 我将用户提交的信息传递给GM​​。 是否有安全问题,用户可以使用pipe道(或其他命令行欺骗)进行某种注入攻击? 还是spawn保护呢? 如果不是的话,在这种情况下是否有逃避用户提交值的最佳做法?

使用没有ES6语法和良率的Nightmare.js

我使用nightmare.js构build了一个简单的节点脚本来抓取网站 var Nightmare = require('nightmare'); var vo = require('vo'); vo(run)(function(err, result) { if (err) throw err; }); function *run() { var x = Date.now(); var nightmare = Nightmare(); var html = yield nightmare .goto('http://google.com') .evaluate(function() { return document.getElementsByTagName('html')[0].innerHTML; }); console.log("done in " + (Date.now()-x) + "ms"); console.log("result", html); yield nightmare.end(); } 我想在一个使用较旧版本的节点的环境中运行这个不支持ES6function的节点。 在github页面上没有关于如何做这个没有“yield”关键字的例子。 我在这里find了一个没有使用ES6语法的用法示例: 带有噩梦的网页浏览 […]

NodeJS产生标准输出string格式

我在节点中产生一个进程,跟踪这个命令的输出: proc.stdout.on("data", function (data) { console.log(data.toString()); }); 它运作良好,但是,输出似乎是分裂的线路: npm http 304 https://registry.npmjs.org/underscore 以上只是npm install响应的一行。 通常情况下,这一切都在一行中,这也是在响应之前和之后添加换行符。 有没有办法让数据输出看起来像标准运行,即逐行?

如果脚本被杀死,node.js产生的进程将继续存在

是否有可能确保生成的进程node.js child_process将被杀害父时杀害? 这是一个示例脚本 var spawn = require('child_process').spawn; var log_tail = spawn("tail", ["-f", "/dev/null"]); setInterval(function() { console.log('just chilling'); }, 10000); 如果我看看进程树,我看到这个: $ ps faux ubuntu 9788 0.0 0.0 73352 1840 ? S 15:04 0:00 | \_ sshd: ubuntu@pts/7 ubuntu 9789 0.0 0.2 25400 6804 pts/7 Ss 15:04 0:00 | \_ -bash ubuntu 10149 1.0 0.2 655636 […]

node.js使用单独的stdout和stderrstream交互式产生一个subprocess

考虑下面的C程序(test.c): #include <stdio.h> int main() { printf("string out 1\n"); fprintf(stderr, "string err 1\n"); getchar(); printf("string out 2\n"); fprintf(stderr, "string err 2\n"); fclose(stdout); } 哪一个应该打印一行stdout,一行stderr,然后等待用户input,然后另一行stdout和另一行stderr。 非常基本! 在编译并在命令行上运行时,程序输出完成时(用户input为getchar()): $ ./test string out 1 string err 1 string out 2 string err 2 当试图用下面的代码使用nodejs产生这个程序作为subprocess时: var TEST_EXEC = './test'; var spawn = require('child_process').spawn; var test = spawn(TEST_EXEC); test.stdout.on('data', function […]