通过shell启动节点服务器并在完成后打印一些内容

时间:2016-07-04 21:43:55

标签: node.js shell gulp

我正在寻找一种通过shell命令启动Node服务器的方法,然后打印一些东西。

TL;博士

我有一个Gulp任务:

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

现在,对于正确触发的回调,我可以使用两种解决方案:

解决方案1 ​​

  • 让服务器在启动后输出内容

示例server/app.js

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

此解决方案不理想

  • 它引入了gulpfile.js和server / app.js之间的耦合。
  • 耦合是'start'关键字。

解决方案2

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

示例:

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

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

以上操作不起作用 - 运行时,它只输出我的服务器配置为在启动时打印的内容。 <{1}}字符串永远不会被打印出来。

gulptask

'start'

上述任务当然不会奏效,但这是我想要实现的目标。

2 个答案:

答案 0 :(得分:1)

$ node server/app.js && echo 'start'的问题是&&之后的任何内容只会在服务器进程运行完毕后运行,而不是在它开始运行之后运行。

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

你可以用$ node server/app.js & sleep 2 && echo 'start'这样的东西来实现这个目标(睡觉是因为你想给它一些时间来实际连接到实际开始之前说它已经开始了)

注意:我认为服务器正在侦听服务器日志中的端口XXXX是非常常见的。

答案 1 :(得分:1)

对此没有真正的解决方案,因为节点应用程序正在阻止,如果没有使用应用程序本身的一些线索,您将永远不会开始。您可以做的一件事就是在不从服务器输出字符串的情况下检查节点应用程序是否正在侦听其端口。像netstat -ant | awk '$6 == "LISTEN" && $4 ~ /\.4000$/'这样的东西,其中4000是节点应用正在监听的端口。

但是我建议你保留第一种方法,在我看来,耦合并不是很重要。