<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Node.js 基礎(chǔ)知識(shí)

          共 2694字,需瀏覽 6分鐘

           ·

          2020-08-31 15:24

          d3f2f1b0d95adbdc3d749e00c7740799.webp

          在開(kāi)始講解 Node.js 相關(guān)知識(shí)之前,我們先來(lái)聊聊 Node.js 的一些基礎(chǔ)知識(shí):如何正確退出Node.js 應(yīng)用,環(huán)境變量,部署方式選擇。

          如何退出 Node.js 應(yīng)用

          我們有多種退出 Node.js 應(yīng)用程序的方式,當(dāng)你在命令行中運(yùn)行程序時(shí),你可以通過(guò) ctrl-C 關(guān)閉它,但在這里我想討論的是以編程方式退出。

          讓我們從最激進(jìn)的一個(gè)開(kāi)始介紹,看看為什么你最好不要使用它。

          process 核心模塊提供了一個(gè)方便的方法,允許你以編程方式退出 Node.js 程序: process.exit()當(dāng) Node.js 運(yùn)行到此行時(shí),將立即強(qiáng)制終止該進(jìn)程。

          這意味著任何待處理的回調(diào),任何仍在發(fā)送的網(wǎng)絡(luò)請(qǐng)求,任何文件系統(tǒng)訪問(wèn)或?qū)懭?stdoutstderr 的進(jìn)程—— 所有都將立即被終止。

          如果這對(duì)你沒(méi)有問(wèn)題,你可以傳遞一個(gè)整數(shù),該整數(shù)表示操作系統(tǒng)的退出代碼:

          
           
          1. process.exit(1)

          默認(rèn)情況下,退出代碼為0,表示成功。不同的退出代碼具有不同的含義,你可能希望在自己的系統(tǒng)中使用它們以使程序與其他程序通信。你可以在此處閱讀退出代碼的更多信息。

          你還可以設(shè)置 process.exitCode屬性:

          
           
          1. process.exitCode =1

          當(dāng)程序運(yùn)行結(jié)束時(shí),Node.js將返回該退出代碼。所有處理完成后,程序?qū)⒄M顺觥?/p>

          很多時(shí)候使用 Node.js 我們啟動(dòng)服務(wù)器,比如這個(gè)HTTP服務(wù)器:

          
           
          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'))

          這個(gè)程序永遠(yuǎn)不會(huì)結(jié)束。如果調(diào)用 process.exit(),則任何當(dāng)前掛起或正在運(yùn)行的請(qǐng)求都將被中止,這不是一種好的處理方式。

          在這種情況下,你需要向命令發(fā)送 SIGTERM信號(hào),并使用進(jìn)程信號(hào)處理程序處理該信號(hào):

          注意: process不需要手動(dòng)引入,它會(huì)自動(dòng)引入。

          
           
          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. })

          信號(hào)是什么?信號(hào)是一種可移植的操作系統(tǒng)接口(POSIX)內(nèi)部通信系統(tǒng):向進(jìn)程發(fā)送通知,以便在發(fā)生事件時(shí)通知它。 SIGKILL 是告訴進(jìn)程立即終止的信號(hào),理想情況下就像 process.exit() 一樣。

          SIGTERM 是指示進(jìn)程正常終止的信號(hào)。這是來(lái)自 upstartsupervisord 等流程管理器發(fā)出的信號(hào)。

          你可以從程序內(nèi)部發(fā)送此信號(hào),在一個(gè)函數(shù)中:

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

          或者從另一個(gè)正在運(yùn)行的 Node.js 程序,或者其他你想終止的運(yùn)行在你系統(tǒng)上的你知道PID的進(jìn)程。

          如何從 Node.js 讀取環(huán)境變量

          Node.js 的 process 核心模塊 提供了 env 屬性,它托管了進(jìn)程啟動(dòng)時(shí)設(shè)置的所有環(huán)境變量。

          以下是訪問(wèn) NODE_ENV環(huán)境變量的示例,該變量默認(rèn)為 development。

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

          在腳本運(yùn)行之前將其設(shè)置為 production 將告訴 Node.js 這是一個(gè)生產(chǎn)環(huán)境。

          通過(guò)這種方式,你可以訪問(wèn)你設(shè)置的任何自定義環(huán)境變量。

          在哪兒部署你的 Node.js 應(yīng)用

          Node.js應(yīng)用程序可以在很多地方托管,具體取決于你的需求。

          下面是一個(gè)簡(jiǎn)單的不完整的可選服務(wù)清單,當(dāng)你想要部署你的應(yīng)用程序并使其可公開(kāi)訪問(wèn)時(shí),你可以查看這些選項(xiàng)。

          我將從最簡(jiǎn)單的介紹到更為強(qiáng)大更復(fù)雜的部署方式。

          最簡(jiǎn)單的選擇:本地隧道

          即使你擁有動(dòng)態(tài)IP,或者你使用的是NAT,也可以使用本地隧道部署應(yīng)用程序并直接由本機(jī)提供服務(wù)。這適用于一些快速測(cè)試,演示產(chǎn)品或與極少數(shù)人共享小應(yīng)用。

          ngrok 是一個(gè)非常好用的工具,適用于所有平臺(tái)。

          使用它,你只需輸入 ngrok PORT,你想要的端口就會(huì)暴露在互聯(lián)網(wǎng)上。 你可以獲得一個(gè)ngrok.io域名,但通過(guò)付費(fèi)訂閱,你可以獲得自定義URL以及更多安全選項(xiàng)(請(qǐng)注意,你正在將計(jì)算機(jī)打開(kāi)到公共Internet)。

          你也可以使用localtunnel:

          
           
          1. npm install -g localtunnel


          2. # 指定端口 啟動(dòng)隧道

          3. lt --port 8000

          零配置部署

          Zeit Now

          Zeit是一個(gè)有趣的選擇。 你只需在終端中輸入 now命令,它就會(huì)負(fù)責(zé)部署你的應(yīng)用程序。 有免費(fèi)版本,付費(fèi)版本更強(qiáng)大。你會(huì)忘記服務(wù)器,只管部署應(yīng)用程序就行了。

          Heroku

          Heroku是一個(gè)了不起的平臺(tái)。它的官網(wǎng)有關(guān)于部署 Node.js 的詳細(xì)文檔

          虛擬主機(jī)

          這兒我會(huì)介紹一些體驗(yàn)不錯(cuò)的免備案虛擬主機(jī)提供商,以推薦程度從高到低排序:

          • vultr 我一直使用的 VPS,速度也還不錯(cuò)

          • AWS aws 提供了一年的的免費(fèi)試用

          • Digital Ocean

          • Linode


          相關(guān)推薦:

          Node.js 入門(mén)指南:Node.js 簡(jiǎn)介

          Node命令行工具開(kāi)發(fā)【看段子】

          node爬蟲(chóng):小年夜送你一大波美腿圖

          《Node.js從入門(mén)到上線》入門(mén)篇




          4115f3e4cd52785b60d364c8044dc31a.webp





          左手代碼右手磚,拋磚引玉

          給點(diǎn)個(gè)贊,好不好啊



          ▽點(diǎn)擊閱讀原文 獲得更好的閱讀體驗(yàn),

              可查看相關(guān)鏈接

          瀏覽 39
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲第一页在线免费观看 | 国产高潮又爽又无遮挡又免费 | 夜色福利在线 | 日本高潮视频在线观看 | 大香蕉操B视频 |