通过shell启动节点服务器,完成后打印

我正在寻找一种方法来通过shell命令启动节点服务器,然后打印一些内容。

TL;博士

我有一个Gulp任务:

  • 通过发出$ node server/app.js命令来启动节点服务器
  • 服务器启动必须调用cb()

现在,为了适当的回火,我可以使用两种解决scheme:

解决scheme1

  • 启动后让服务器输出一些东西

示例server/app.js

 http.listen((process.env.PORT || 5000), function(){ console.log("start"); }); 

这个解决scheme并不理想

  • 它介绍了gulpfile.js和server / app.js之间的耦合。
  • 耦合是“开始”关键字。

解决scheme2

  • 发出$ node server/app.js命令时发出$ echo命令

例:

 $ node server.app.js && echo 'start' 

这是理想的,因为它不会将我的app.js文件与我的gulpfile.js打印在一起。

上述不起作用 – 运行时,它只是输出我的服务器configuration为在启动时打印。 'start'string永远不会被打印。

巨人

 gulp.task("node server/app.js && echo 'start'", function(cb) { serverProcess.stdout.on("data", function(data) { if(data.toLowerCase().includes("start")) { return cb(); } }); }); 

上述任务当然是行不通的,但这是我想要达到的目标。

没有一个真正的解决scheme,因为节点应用程序是阻塞的,你将永远不会从现在开始使用应用程序本身的一些线索。 你可以做的一件事就是不从服务器输出一个string,而是检查节点应用程序是否正在监听它的端口。 像netstat -ant | awk '$6 == "LISTEN" && $4 ~ /\.4000$/' netstat -ant | awk '$6 == "LISTEN" && $4 ~ /\.4000$/' 4000 netstat -ant | awk '$6 == "LISTEN" && $4 ~ /\.4000$/'其中4000是node-app正在侦听的端口。

但我会build议你保持你的第一个方法,在我看来,这种耦合并不是什么大不了的事情。

$ node server/app.js && echo 'start'是, &&后面的任何内容只会在服务器进程运行完成后运行,而不是在启动之后运行。

你想要的是在服务器启动后运行一些东西。

你可以用$ node server/app.js & sleep 2 && echo 'start'来达到这个目的(睡眠,因为你想给它一些时间来实际连接,在它开始之前真正开始)

注:我认为这是相当传统的说,服务器正在监听端口XXXX在服务器的日志。