Node.js 基础知识
共 2694字,需浏览 6分钟
·
2020-08-31 15:24
在开始讲解 Node.js 相关知识之前,我们先来聊聊 Node.js 的一些基础知识:如何正确退出Node.js 应用,环境变量,部署方式选择。
如何退出 Node.js 应用
我们有多种退出 Node.js 应用程序的方式,当你在命令行中运行程序时,你可以通过 ctrl-C
关闭它,但在这里我想讨论的是以编程方式退出。
让我们从最激进的一个开始介绍,看看为什么你最好不要使用它。
process
核心模块提供了一个方便的方法,允许你以编程方式退出 Node.js 程序: process.exit()
当 Node.js 运行到此行时,将立即强制终止该进程。
这意味着任何待处理的回调,任何仍在发送的网络请求,任何文件系统访问或写入 stdout
或 stderr
的进程—— 所有都将立即被终止。
如果这对你没有问题,你可以传递一个整数,该整数表示操作系统的退出代码:
process.exit(1)
默认情况下,退出代码为0,表示成功。不同的退出代码具有不同的含义,你可能希望在自己的系统中使用它们以使程序与其他程序通信。你可以在此处阅读退出代码的更多信息。
你还可以设置 process.exitCode
属性:
process.exitCode =1
当程序运行结束时,Node.js将返回该退出代码。所有处理完成后,程序将正常退出。
很多时候使用 Node.js 我们启动服务器,比如这个HTTP服务器:
const express = require('express')
const app = express()
app.get('/',(req, res)=>{
res.send('Hi!')
})
app.listen(3000,()=> console.log('Server Ready'))
这个程序永远不会结束。如果调用 process.exit()
,则任何当前挂起或正在运行的请求都将被中止,这不是一种好的处理方式。
在这种情况下,你需要向命令发送 SIGTERM
信号,并使用进程信号处理程序处理该信号:
注意: process
不需要手动引入,它会自动引入。
const express = require('express')
const app = express()
app.get('/',(req, res)=>{
res.send('Hi!')
})
app.listen(3000,()=> console.log('Server Ready'))
process.on('SIGTERM',()=>{
app.close(()=>{
console.log('Process terminated')
})
})
信号是什么?信号是一种可移植的操作系统接口(POSIX)内部通信系统:向进程发送通知,以便在发生事件时通知它。 SIGKILL
是告诉进程立即终止的信号,理想情况下就像 process.exit()
一样。
SIGTERM
是指示进程正常终止的信号。这是来自 upstart
或 supervisord
等流程管理器发出的信号。
你可以从程序内部发送此信号,在一个函数中:
process.kill(process.pid,'SIGTERM')
或者从另一个正在运行的 Node.js 程序,或者其他你想终止的运行在你系统上的你知道PID的进程。
如何从 Node.js 读取环境变量
Node.js 的 process
核心模块 提供了 env
属性,它托管了进程启动时设置的所有环境变量。
以下是访问 NODE_ENV
环境变量的示例,该变量默认为 development
。
process.env.NODE_ENV // "development"
在脚本运行之前将其设置为 production
将告诉 Node.js 这是一个生产环境。
通过这种方式,你可以访问你设置的任何自定义环境变量。
在哪儿部署你的 Node.js 应用
Node.js应用程序可以在很多地方托管,具体取决于你的需求。
下面是一个简单的不完整的可选服务清单,当你想要部署你的应用程序并使其可公开访问时,你可以查看这些选项。
我将从最简单的介绍到更为强大更复杂的部署方式。
最简单的选择:本地隧道
即使你拥有动态IP,或者你使用的是NAT,也可以使用本地隧道部署应用程序并直接由本机提供服务。这适用于一些快速测试,演示产品或与极少数人共享小应用。
ngrok 是一个非常好用的工具,适用于所有平台。
使用它,你只需输入 ngrok PORT
,你想要的端口就会暴露在互联网上。 你可以获得一个ngrok.io域名,但通过付费订阅,你可以获得自定义URL以及更多安全选项(请注意,你正在将计算机打开到公共Internet)。
你也可以使用localtunnel:
npm install -g localtunnel
# 指定端口 启动隧道
lt --port 8000
零配置部署
Zeit Now
Zeit是一个有趣的选择。 你只需在终端中输入 now
命令,它就会负责部署你的应用程序。 有免费版本,付费版本更强大。你会忘记服务器,只管部署应用程序就行了。
Heroku
Heroku是一个了不起的平台。它的官网有关于部署 Node.js 的详细文档
虚拟主机
这儿我会介绍一些体验不错的免备案虚拟主机提供商,以推荐程度从高到低排序:
vultr 我一直使用的 VPS,速度也还不错
AWS aws 提供了一年的的免费试用
Digital Ocean
Linode
相关推荐:
左手代码右手砖,抛砖引玉
给点个赞,好不好啊
▽点击阅读原文 获得更好的阅读体验,
可查看相关链接