# Hello World

# 安装 Node.js

# ubuntu
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
const http = require("http");
const hostname = "localhost";
const port = 3000;
const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader("Content-Type", "text/plain");
  res.end("你好世界\n");
});
server.listen(port, hostname, () => {
  console.log(`服务器运行在 http://${hostname}:${port}/`);
});

# 使用 Node.js 运行 JavaScript

node app.js

# 退出 Node.js 程序

Process 模块
process 核心模块提供一种便利的方法,可以以编程的方式退出 Node.js 程序 可以传入一个整数,向操作系统发送一个退出码,比如

process.exit(1);
//  或者直接设定退出码
process.exitCode = 1;

正常情况下,如果没有异步操作在等待,Node.js 会以状态码 0 退出

SIGTERM 信号
当有异步操作正在等待时,如果调用 process.exit(),则异步任务会被强制关闭,这显然不太友好, 在这种情况下,我们需要发送 sigterm 信号来杀掉进程,比如

cosnt express = require('express');
const app = express()
app.get('/', (req, res) => {
    res.send('Hello I am Express Https FrameWork ')
})
const server = app.listen(3000, () => console.log('服务器已经起来了'))
process.on('SIGTERM', () => {
    server.close(() => {
        console.log('进程已经被杀掉')
    })
})

补充说明

当 Node.js 进程接收到一个信号的时候,会触发信号事件

信号事件的事件处理函数,会接收信号的名称作为第一个参数,注意事件名称,要使用大写; 发送 SIGINT, SIGTERM(正常终止), SIGKILL(立即终止)会导致目标进程被无条件终止,然后子进程会报告该进程已经被信号终止
SIGKILL 默认不带参数发送的信号就是 SIGTERM

编程发送终止信号

process.kill(process.pid, "SIGTERM");