學node 之前你要知道這些

2023-05-09 18:02:29

初識nodejs

  19年年底一個偶然的機會接到年會任務,有微信掃碼登入、投票、彈幕等功能,於是決定用node 來寫幾個服務,結果也比較順利。

  當時用看了下koa2的官方檔案,知道怎麼連線資料庫、怎麼對映表實體,怎麼處理http,怎麼處理異常等,就可以直接寫起來了。從應用層面上來說 nodejs 入門還是挺簡單的,前幾天在整理語雀時發現前幾年整理的nodjs的檔案,這裡分享下,希望對於初學者有些幫助。

什麼是伺服器

  伺服器也是電腦,伺服器是為電腦提供服務的電腦、裝置,既然是電腦,那麼它也一樣是由CPU,主機板,記憶體條,硬碟,機箱,電源等硬體組成。當然由於伺服器的特殊性,根我們家用的電腦還是有區別,如大小,處理資料的快慢,溫度等。

  伺服器也是計算機、電腦,只不過分工不同,如我們人類有醫生、護士、律師等,在計算機的世界中也是如此,專門提供服務的計算機,我們叫伺服器

  如在我們寫了一個網站,我們想讓其他人也能開啟這個網址,這個時候我們可以把寫好的程式碼發給他,讓他跑起來,雖然這樣也可以,但是這樣非常不友好,第一是使用者很多呢?第二並不是所有人都是程式設計師。所以這個時候如果把這個東西放到某臺計算機A上,然後別人可以通過某種服務來存取(比如 http 服務),此時這個計算機A就叫伺服器,當然現實生活中伺服器不止這一種,還有如 資料伺服器、檔案伺服器、應用伺服器、WEB伺服器等,根據計算機的服務請求,並進行相應的處理,具備承擔服務和保障服務的能力。

通俗理解:伺服器是提供計算機服務的裝置

常用linux命令

pwd 顯示當前的目錄路徑  
ls 顯示當前目錄下的內容  
ls -R 列出子目錄中的所有檔案  
ls -a 顯示隱藏的檔案  
cd 改變當前工作目錄 cd .. 開啟上一級,cd / 開啟跟目錄
cls 清除螢幕資訊  
mkdir 建立目錄  
rm 刪除檔案或者空目錄  
rmdir 刪除空目錄  
rm -rf dir 刪除非空目錄  
ps 列出系統中當前正在執行的那些程序  
ps -ef | grep ssh 查詢特定程序資訊  ps -ef | grep mysql
kill -9 pid 終止某程序  

同步、非同步

 同步就是指一個程序在執行某個動作、請求時,如果這個動作需要一段時間才有結果,那麼這個程序將會一直等待下去,直到收到返回資訊才繼續執行下去,反之非同步,類似的概念還有 io 阻塞與非阻塞。如ui 介面中點選一個按鈕給伺服器端發出一個請求,如果這個過程涉及成同步的,那麼ui 會一直等待這個介面,在這個介面未返回時整個ui介面都是不可用的狀態。

網路埠

  通俗的理解,把計算機想成一個大的菜市場,菜市場中的各個檔口就是安裝在電腦上的各個應用程式,而檔口的編號就是類似我們說的埠。ip 只是知道菜市場的地址,並不知道具體根哪個檔口通訊,這就是埠的作用。

  在看看比較專業的定義,埠號的主要作用是表示一臺計算機中的特定程序所提供的服務。網路中的計算機是通過IP地址來代表其身份的,它只能表示某臺特定的計算機,但是一臺計算機上可以同時提供很多個服務,如資料庫服務、FTP服務、Web服務等,我們就通過埠號來區別相同計算機所提供的這些不同的服務,如常見的埠號21表示的是FTP服務,埠號23表示的是Telnet服務,埠號25指的是SMTP服務等。

url 格式  

URL的全稱是Uniform Resource Locator(統一資源定位符),它是因特網全球資訊網服務程式上用於指定資訊位置的表示方法。

通俗理解就是 URL就是資源的地址、位置,網際網路上的每個資源都有一個唯一的URL,通過1個URL,能找到網際網路上唯一的1個資源。

URL的一般語法格式為:protocol :// hostname[:port] / path / [:parameters][?query]#anchor其中帶方括號的為可選項

  • protocol:代表的是存取的協定,一般為http或者https以及ftp等。
  • hostname:主機名,域名,比如www.baidu.com
  • port:埠號。當你存取一個網站的時候,瀏覽器預設使用80埠。
  • path:查詢路徑。比如:www.jianshu.com/trending/now後面的trending/now就是path
  • parameters: 資原始檔名,有時候統一叫path
  • query:查詢字串,比如:www.baidu.com/s?wd=python,後面的wd=python就是查詢字串。
  • anchor:錨點,後臺一般不用管,前端用來做頁面定位的。

常見的協定:

  1. http:超文字傳輸協定,存取的是遠端的網路資源,格式是http://
  2. https:協定相當於是http協定的安全版
  3. file:存取的是本地計算機上的資源,格式是file://(不用加主機地址)
  4. mailto:存取的是電子郵件地址,格式是mailto:
  5. ftp:存取的是共用主機的檔案資源,格式是 ftp://
  6. thunder:通過支援thunder(專用下載連結)協定的P2P軟體存取該資源(代表軟體:迅雷),格式是thunder://

http 協定

http在網路架構中屬於應用層協定,通過瀏覽器發起http 協定可以跟伺服器進行通訊。

HTTP(hypertext transport protocol)協定,中文叫超文字傳輸協定 是一種基於TCP/IP的應用層通訊協定

這個協定詳細規定了 瀏覽器 和全球資訊網 伺服器 之間互相通訊的規則,協定中主要規定了兩個方面的內容

  • 使用者端:用來向伺服器傳送資料,可以被稱之為請求報文
  • 伺服器端:向用戶端返回資料,可以被稱之為響應報文

請求報文

  • 請求行
  • 請求頭
  • 空行
  • 請求體

響應報文

  • 響應行
  • 響應頭
  • 空行
  • 響應體

資料庫

  資料庫是「按照資料結構來組織、儲存和管理資料的倉庫」。是一個長期儲存在計算機內的、有組織的、可共用的、統一管理的大量資料的集合。簡單理解就是儲存資料的倉庫,我們可以通過我們的程式碼根這個倉庫建立連線,這樣可以操作、查詢這些資料。

 資料庫通常分為關係型資料庫、非關係型資料庫。

關係型資料庫

  關係型資料庫和常見的表格比較相似,關係型資料庫中表與表之間是有很多複雜的關聯關係的。 常見的關係型資料庫有MysqlSqlServer等。在輕量或者小型的應用中,使用不同的關係型資料庫對系統的效能影響不大,但是在構建大型應用時,則需要根據應用的業務需求和效能需求,選擇合適的關係型資料庫。

常見關係型資料庫: Oracle,SQLServer,DB2,Mysql

非關係型資料庫

  NoSQL僅僅是一個概念,泛指非關係型的資料庫,區別於關聯式資料庫

  隨著近些年技術方向的不斷拓展,大量的NoSql資料庫如MongoDB、Redis、Memcache出於簡化資料庫結構、避免冗餘、影響效能的表連線、摒棄複雜分散式的目的被設計。NoSQL資料庫適合追求速度和可延伸性、業務多變的應用場景。對於非結構化資料的處理更合適,如文章、評論等

SQL

SQL 是 Structured Query Language 的縮寫,中文譯為「結構化查詢語言」。SQL 是一種計算機語言,用來儲存、檢索和修改關係型資料庫中儲存的資料。

通俗理解就是可以用來操作我們儲存在資料庫中的資料的語言,如查詢、刪除等

SELECT product_name, product_type
 FROM Product;
 WHERE 1 = 1 
 AND product_type = 'xx';
 
 // 多表聯查
 SELECT product_name, product_type
 FROM Product1 t1,Product2 t2
 WHERE 1 = 1 
 AND t1.id = t2.id;
 
 // 同理
 left join,
 right join
 
 其他分組、統計、排序等也很簡單

nginx 基本概念

Nginx是一個高效能的HTTP伺服器和反向代理web伺服器。在前端中我們知道一些基本的知識即可,通常我們用它來做靜態資源伺服器、介面反向代理。
 
常用命令
start nginx #啟動nginx
nginx -s reload     #重新載入Nginx組態檔,然後以優雅的方式重啟Nginx
nginx -s stop       #強制停止Nginx服務
nginx -s quit       #優雅地停止Nginx服務(即處理完所有請求後再停止服務)
nginx -h        #開啟幫助資訊
nginx -v        #顯示版本資訊並退出
nginx -V        #顯示版本和設定選項資訊,然後退出
nginx -t        #檢測組態檔是否有語法錯誤,然後退出
nginx -T        #檢測組態檔是否有語法錯誤,轉儲並退出
nginx -q        #在檢測組態檔期間遮蔽非錯誤資訊
nginx -p prefix     #設定字首路徑(預設是:/usr/share/nginx/)
nginx -c filename   #設定組態檔(預設是:/etc/nginx/nginx.conf)
nginx -g directives     #設定組態檔外的全域性指令
killall nginx       #殺死所有nginx程序

設定注意事項

  1. 注意設定時 root與alias 區別,特別是我們前端打包時加了虛擬目錄,如果設定了 publicPath,那麼我們需要設定alias,而不是root
  2. 注意匹配規則、順序,通常匹配了就不會繼續匹配下,所以如果多個類似的介面字首,需要反向代理到不同的服務時要注意設定的順序
  3. 介面反向代理時加 / 與不加的區別