Node.js 基础知识

共 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










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


给点个赞,好不好啊





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


    可查看相关链接


浏览 39
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

分享
举报