Node.js 基础知识

JavaScript之禅

共 2694字,需浏览 6分钟

 ·

2020-08-31 15:24

d3f2f1b0d95adbdc3d749e00c7740799.webp

在开始讲解 Node.js 相关知识之前,我们先来聊聊 Node.js 的一些基础知识:如何正确退出Node.js 应用,环境变量,部署方式选择。

如何退出 Node.js 应用

我们有多种退出 Node.js 应用程序的方式,当你在命令行中运行程序时,你可以通过 ctrl-C 关闭它,但在这里我想讨论的是以编程方式退出。

让我们从最激进的一个开始介绍,看看为什么你最好不要使用它。

process 核心模块提供了一个方便的方法,允许你以编程方式退出 Node.js 程序: process.exit()当 Node.js 运行到此行时,将立即强制终止该进程。

这意味着任何待处理的回调,任何仍在发送的网络请求,任何文件系统访问或写入 stdoutstderr 的进程—— 所有都将立即被终止。

如果这对你没有问题,你可以传递一个整数,该整数表示操作系统的退出代码:


 
  1. process.exit(1)

默认情况下,退出代码为0,表示成功。不同的退出代码具有不同的含义,你可能希望在自己的系统中使用它们以使程序与其他程序通信。你可以在此处阅读退出代码的更多信息。

你还可以设置 process.exitCode属性:


 
  1. process.exitCode =1

当程序运行结束时,Node.js将返回该退出代码。所有处理完成后,程序将正常退出。

很多时候使用 Node.js 我们启动服务器,比如这个HTTP服务器:


 
  1. const express = require('express')

  2. const app = express()


  3. app.get('/',(req, res)=>{

  4. res.send('Hi!')

  5. })


  6. app.listen(3000,()=> console.log('Server Ready'))

这个程序永远不会结束。如果调用 process.exit(),则任何当前挂起或正在运行的请求都将被中止,这不是一种好的处理方式。

在这种情况下,你需要向命令发送 SIGTERM信号,并使用进程信号处理程序处理该信号:

注意: process不需要手动引入,它会自动引入。


 
  1. const express = require('express')

  2. const app = express()


  3. app.get('/',(req, res)=>{

  4. res.send('Hi!')

  5. })


  6. app.listen(3000,()=> console.log('Server Ready'))


  7. process.on('SIGTERM',()=>{

  8. app.close(()=>{

  9. console.log('Process terminated')

  10. })

  11. })

信号是什么?信号是一种可移植的操作系统接口(POSIX)内部通信系统:向进程发送通知,以便在发生事件时通知它。 SIGKILL 是告诉进程立即终止的信号,理想情况下就像 process.exit() 一样。

SIGTERM 是指示进程正常终止的信号。这是来自 upstartsupervisord 等流程管理器发出的信号。

你可以从程序内部发送此信号,在一个函数中:


 
  1. process.kill(process.pid,'SIGTERM')

或者从另一个正在运行的 Node.js 程序,或者其他你想终止的运行在你系统上的你知道PID的进程。

如何从 Node.js 读取环境变量

Node.js 的 process 核心模块 提供了 env 属性,它托管了进程启动时设置的所有环境变量。

以下是访问 NODE_ENV环境变量的示例,该变量默认为 development


 
  1. process.env.NODE_ENV // "development"

在脚本运行之前将其设置为 production 将告诉 Node.js 这是一个生产环境。

通过这种方式,你可以访问你设置的任何自定义环境变量。

在哪儿部署你的 Node.js 应用

Node.js应用程序可以在很多地方托管,具体取决于你的需求。

下面是一个简单的不完整的可选服务清单,当你想要部署你的应用程序并使其可公开访问时,你可以查看这些选项。

我将从最简单的介绍到更为强大更复杂的部署方式。

最简单的选择:本地隧道

即使你拥有动态IP,或者你使用的是NAT,也可以使用本地隧道部署应用程序并直接由本机提供服务。这适用于一些快速测试,演示产品或与极少数人共享小应用。

ngrok 是一个非常好用的工具,适用于所有平台。

使用它,你只需输入 ngrok PORT,你想要的端口就会暴露在互联网上。 你可以获得一个ngrok.io域名,但通过付费订阅,你可以获得自定义URL以及更多安全选项(请注意,你正在将计算机打开到公共Internet)。

你也可以使用localtunnel:


 
  1. npm install -g localtunnel


  2. # 指定端口 启动隧道

  3. lt --port 8000

零配置部署

Zeit Now

Zeit是一个有趣的选择。 你只需在终端中输入 now命令,它就会负责部署你的应用程序。 有免费版本,付费版本更强大。你会忘记服务器,只管部署应用程序就行了。

Heroku

Heroku是一个了不起的平台。它的官网有关于部署 Node.js 的详细文档

虚拟主机

这儿我会介绍一些体验不错的免备案虚拟主机提供商,以推荐程度从高到低排序:

  • vultr 我一直使用的 VPS,速度也还不错

  • AWS aws 提供了一年的的免费试用

  • Digital Ocean

  • Linode


相关推荐:

Node.js 入门指南:Node.js 简介

Node命令行工具开发【看段子】

node爬虫:小年夜送你一大波美腿图

《Node.js从入门到上线》入门篇




4115f3e4cd52785b60d364c8044dc31a.webp





左手代码右手砖,抛砖引玉

给点个赞,好不好啊



▽点击阅读原文 获得更好的阅读体验,

    可查看相关链接

浏览 27
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报