Ubuntu安裝新版本nodejs的5種姿勢

来源:https://www.cnblogs.com/ganiks/archive/2019/01/18/5-install-position-for-new-release-nodejs-for-ubuntu.html
-Advertisement-
Play Games

寫這篇文章之前,關於ubuntu14.04(Trusty)預設安裝的NodeJS版本是0.10.25百思不解(什麼鬼,哪一年的NodeJS) 寫這篇文章之時,NodeJS的LTS版本號都已經10.15.0,當然Ubuntu在2018年也都發行ubuntu18.04(我還沒打算用) 系統我可以用4... ...


引言:

寫這篇文章之前,關於ubuntu14.04(Trusty)預設安裝的NodeJS版本是0.10.25百思不解(什麼鬼,哪一年的NodeJS)

寫這篇文章之時,NodeJS的LTS版本號都已經10.15.0,當然Ubuntu在2018年也都發行ubuntu18.04(我還沒打算用)

系統我可以用4年前的,但是node不行

於是每次都要倒騰Node新版本的安裝,踩過一些坑

但是本著刨根問底的原則,還是收穫不小

PS:

http://releases.ubuntu.com/

https://nodejs.org/zh-cn/download/releases/

沒錯,14年4月份(ubuntu14.04)發行時,NodeJS剛剛發行了還不是LTS版本的0.10.25(2014-01-23)

 

姿勢A:源碼編譯安裝

【推薦指數:

 

官網下載源碼:http://nodejs.cn/download/  或者你會用wget ***

cd your-source-code-directory
./configure
make
sudo make install

 

姿勢優點:./configure 可以自定義安裝目錄,咳咳,沒必要哈

姿勢缺點:make 費時耗力,記憶體不大夠的VPS或者虛擬機同學建議繞開此姿勢

捫心自問:Linux系統下用戶自己安裝的軟體(如Node、MongoDB),一般都分佈在哪些目錄?

絕大數開源軟體都是公佈源代碼的,源代碼一般被打包為tar.gz歸檔壓縮文件,然後由使用者自行編譯為二進位可執行文件

相容性好/可控制性好/開源軟體會大量使用其他開源軟體的功能,要解決大量的依賴關係

./configure  檢查編譯環境/相關庫文件/配置參數,生成makefile

make     對源代碼進行編譯,生成可執行文件

make install    將生成的可執行文件安裝到當前電腦中

 

姿勢B:添加PPA 用Ubuntu的方式安裝

【推薦指數:★★★★★】

 

ganiks@ganiks-ubuntu-trusty-64:~$ logout
Connection to 127.0.0.1 closed.
PS D:\ganiks\ganiks_ubuntu_trusty64> vagrant destroy
    default: Are you sure you want to destroy the 'default' VM? [y/N] y
==> default: Forcing shutdown of VM...
==> default: Destroying VM and associated drives...
PS D:\ganiks\ganiks_ubuntu_trusty64> vagrant up

#OK, 又是一個乾凈的環境了
#記得更換/etc/apt/source.list為本地源(如阿裡雲)

ganiks@ganiks-ubuntu-trusty-64:~$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

## Installing the NodeSource Node.js 8.x LTS Carbon repo...

#添加PPA這個過程好漫長……5-10分鐘我這裡

#終於添加成功,開始用咱ubuntu的方式安裝 ganiks@ganiks-ubuntu-trusty-64:~$ sudo apt-get install -y nodejs Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: nodejs 0 upgraded, 1 newly installed, 0 to remove and 12 not upgraded. Need to get 13.6 MB of archives. After this operation, 64.3 MB of additional disk space will be used. Get:1 https://deb.nodesource.com/node_8.x/ trusty/main nodejs amd64 8.15.0-1nodesource1 [13.6 MB] Fetched 13.6 MB in 8min 13s (27.5 kB/s) Selecting previously unselected package nodejs. (Reading database ... 63153 files and directories currently installed.) Preparing to unpack .../nodejs_8.15.0-1nodesource1_amd64.deb ... Unpacking nodejs (8.15.0-1nodesource1) ... Processing triggers for man-db (2.6.7.1-1ubuntu1) ... Setting up nodejs (8.15.0-1nodesource1) ... #快來看看成果,不錯,這個方式很ubuntu ganiks@ganiks-ubuntu-trusty-64:~$ whereis node node: /usr/bin/node /usr/bin/X11/node /usr/include/node /usr/share/man/man1/node.1.gz ganiks@ganiks-ubuntu-trusty-64:~$ whereis npm npm: /usr/bin/npm /usr/bin/X11/npm ganiks@ganiks-ubuntu-trusty-64:~$ node -v v8.15.0 ganiks@ganiks-ubuntu-trusty-64:~$ npm -v 6.4.1

參考文檔:

https://github.com/nodesource/distributions#debinstall

NodeSource will maintain Ubuntu distributions in active support by Canonical, including LTS and the intermediate releases.

  • Ubuntu 14.04 LTS (Trusty Tahr) - not available for Node.js 10 and later
  • Ubuntu 16.04 LTS (Xenial Xerus)
  • Ubuntu 18.04 LTS (Bionic Beaver)
  • Ubuntu 18.10 (Cosmic Cuttlefish)

  

姿勢C:用NPM模塊【n】更新Node和NPM

【推薦指數:★★★★★】

 

#一個乾凈的ubuntu14.04環境

#預設的方式安裝nodejs以及npm
ganiks@ganiks-ubuntu-trusty-64:~$ sudo apt install nodejs-legacy npm
ganiks@ganiks-ubuntu-trusty-64:~$ npm -v
1.3.10
ganiks@ganiks-ubuntu-trusty-64:~$ node -v
v0.10.25

#設置npm源為淘寶源
ganiks@ganiks-ubuntu-trusty-64:~$ sudo npm config set registry https://registry.npm.taobao.org

#安裝npm包:n
ganiks@ganiks-ubuntu-trusty-64:~$ sudo npm i -g n
npm http GET https://registry.npm.taobao.org/n
npm http 200 https://registry.npm.taobao.org/n
npm http GET https://registry.npm.taobao.org/n/download/n-2.1.12.tgz
npm http 200 https://registry.npm.taobao.org/n/download/n-2.1.12.tgz
/usr/local/bin/n -> /usr/local/lib/node_modules/n/bin/n
[email protected] /usr/local/lib/node_modules/n

#用包n安裝穩定版本的nodejs
ganiks@ganiks-ubuntu-trusty-64:~$ sudo n stable

     install : node-v11.6.0
       mkdir : /usr/local/n/versions/node/11.6.0
       fetch : https://nodejs.org/dist/v11.6.0/node-v11.6.0-linux-x64.tar.gz
######################################################################## 100.0%
   installed : v11.6.0


#安裝成功後查看node版本,發現sudo可以訪問到新安裝的版本,憑直覺用戶貌似需要重新登錄一下
ganiks@ganiks-ubuntu-trusty-64:~$ node -v
v0.10.25
ganiks@ganiks-ubuntu-trusty-64:~$ npm -v
1.3.10
ganiks@ganiks-ubuntu-trusty-64:~$ sudo node -v
v11.6.0
ganiks@ganiks-ubuntu-trusty-64:~$ sudo npm -v
6.5.0-next.0

#查看node所在,發現模塊n安裝的node在/usr/local路徑下,而老版本的node還在/usr路徑下
ganiks@ganiks-ubuntu-trusty-64:~$ whereis node
node: /usr/bin/node /usr/bin/X11/node /usr/local/bin/node /usr/share/man/man1/node.1.gz
ganiks@ganiks-ubuntu-trusty-64:~$ /usr/bin/node -v
v0.10.25
ganiks@ganiks-ubuntu-trusty-64:~$ /usr/local/bin/node -v
v11.6.0

#希望直覺是對的,logout
ganiks@ganiks-ubuntu-trusty-64:~$ logout
Connection to 127.0.0.1 closed.

$ D:\ganiks\ganiks_ubuntu_trusty64> vagrant ssh
Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-164-generic x86_64)
Last login: Fri Jan 18 07:24:38 2019 from 10.0.2.2

#重新登錄,是新版啦
ganiks@ganiks-ubuntu-trusty-64:~$ node -v
v11.6.0
ganiks@ganiks-ubuntu-trusty-64:~$ npm -v
6.5.0-next.0

#嗯,但是 /usr/bin/node 老版本還在,只是 $PATH後面的路徑 /usr/local/bin/node 覆蓋了老版本
ganiks@ganiks-ubuntu-trusty-64:~$ /usr/bin/node -v
v0.10.25

#強迫症的我還是卸載掉老版本吧,嘻嘻
ganiks@ganiks-ubuntu-trusty-64:~$ sudo apt remove node-legacy npm

模塊n的用法:https://www.npmjs.com/package/n

 

儘可能深刻地解決每一個問題~

https://www.cnblogs.com/ganiks 


 

繼續,我還用過後面2個方案~

nodejs中文網 有個阿裡雲鏡像的東東, 預設是最新版本的地址:

https://npm.taobao.org/mirrors/node/v10.15.0/

(如果需要其他版本的所有鏡像,去掉url後面的版本號訪問即可)

../
docs/                                             26-Dec-2018 05:30                                 -
win-x64/                                          26-Dec-2018 06:43                                 -
win-x86/                                          26-Dec-2018 06:01                                 -
node-v10.15.0-aix-ppc64.tar.gz                    26-Dec-2018 06:17                                 22797819(21.74MB)
node-v10.15.0-darwin-x64.tar.gz                   26-Dec-2018 05:24                                 16354900(15.6MB)
node-v10.15.0-darwin-x64.tar.xz                   26-Dec-2018 05:25                                 11071128(10.56MB)
node-v10.15.0-headers.tar.gz                      26-Dec-2018 05:31                                 446984(436.51kB)
node-v10.15.0-headers.tar.xz                      26-Dec-2018 05:31                                 336760(328.87kB)
node-v10.15.0-linux-arm64.tar.gz                  26-Dec-2018 04:57                                 18598724(17.74MB)
node-v10.15.0-linux-arm64.tar.xz                  26-Dec-2018 04:59                                 11776444(11.23MB)
node-v10.15.0-linux-armv6l.tar.gz                 26-Dec-2018 04:50                                 17537202(16.72MB)
node-v10.15.0-linux-armv6l.tar.xz                 26-Dec-2018 04:51                                 10762604(10.26MB)
node-v10.15.0-linux-armv7l.tar.gz                 26-Dec-2018 04:53                                 17389653(16.58MB)
node-v10.15.0-linux-armv7l.tar.xz                 26-Dec-2018 04:54                                 10696212(10.2MB)
node-v10.15.0-linux-ppc64le.tar.gz                26-Dec-2018 04:51                                 18620944(17.76MB)
node-v10.15.0-linux-ppc64le.tar.xz                26-Dec-2018 04:52                                 11524352(10.99MB)
node-v10.15.0-linux-s390x.tar.gz                  26-Dec-2018 04:54                                 18879786(18.01MB)
node-v10.15.0-linux-s390x.tar.xz                  26-Dec-2018 04:54                                 11475136(10.94MB)
node-v10.15.0-linux-x64.tar.gz                    26-Dec-2018 06:27                                 18630524(17.77MB)
node-v10.15.0-linux-x64.tar.xz                    26-Dec-2018 06:28                                 12307872(11.74MB)
node-v10.15.0-sunos-x64.tar.gz                    26-Dec-2018 04:52                                 19959848(19.04MB)
node-v10.15.0-sunos-x64.tar.xz                    26-Dec-2018 04:53                                 12839268(12.24MB)
node-v10.15.0-win-x64.7z                          26-Dec-2018 06:49                                 9666719(9.22MB)
node-v10.15.0-win-x64.zip                         26-Dec-2018 06:53                                 16252020(15.5MB)
node-v10.15.0-win-x86.7z                          26-Dec-2018 06:01                                 8593771(8.2MB)
node-v10.15.0-win-x86.zip                         26-Dec-2018 06:01                                 14743242(14.06MB)
node-v10.15.0-x64.msi                             26-Dec-2018 06:56                                 17297408(16.5MB)
node-v10.15.0-x86.msi                             26-Dec-2018 06:01                                 15708160(14.98MB)
node-v10.15.0.pkg                                 26-Dec-2018 05:40                                 16615683(15.85MB)
node-v10.15.0.tar.gz                              26-Dec-2018 05:26                                 36300933(34.62MB)
node-v10.15.0.tar.xz                              26-Dec-2018 05:29                                 20217588(19.28MB)
SHASUMS256.txt                                    26-Dec-2018 16:25                                 3347(3.27kB)
SHASUMS256.txt.asc                                26-Dec-2018 16:25                                 3884(3.79kB)
SHASUMS256.txt.sig                                26-Dec-2018 16:25                                 310(310B)

 

下載 “node-v10.15.0-linux-x64.tar.gz” 來研究下

ganiks@ganiks-ubuntu-trusty-64:~$ wget https://npm.taobao.org/mirrors/node/v10.15.0/node-v10.15.0-linux-x64.tar.gz
2019-01-18 10:09:05 (5.77 MB/s) - ‘node-v10.15.0-linux-x64.tar.gz’ saved [18630524/18630524]

ganiks@ganiks-ubuntu-trusty-64:~$ ls
node-v10.15.0-linux-x64.tar.gz
ganiks@ganiks-ubuntu-trusty-64:~$ tar xzf node-v10.15.0-linux-x64.tar.gz
ganiks@ganiks-ubuntu-trusty-64:~$ ls
node-v10.15.0-linux-x64  node-v10.15.0-linux-x64.tar.gz
ganiks@ganiks-ubuntu-trusty-64:~$ ls -l node-v10.15.0-linux-x64
total 164
drwxrwxr-x 2 ganiks ganiks  4096 Dec 26 06:27 bin
-rw-rw-r-- 1 ganiks ganiks 52896 Dec 26 06:27 CHANGELOG.md
drwxrwxr-x 3 ganiks ganiks  4096 Dec 26 06:27 include
drwxrwxr-x 3 ganiks ganiks  4096 Dec 26 06:27 lib
-rw-rw-r-- 1 ganiks ganiks 65839 Dec 26 06:27 LICENSE
-rw-rw-r-- 1 ganiks ganiks 25981 Dec 26 06:27 README.md
drwxrwxr-x 5 ganiks ganiks  4096 Dec 26 06:27 share
ganiks@ganiks-ubuntu-trusty-64:~$ ls -l node-v10.15.0-linux-x64/bin node-v10.15.0-linux-x64/lib/node_modules/
node-v10.15.0-linux-x64/bin:
total 38284
-rwxrwxr-x 1 ganiks ganiks 39199960 Dec 26 06:26 node
lrwxrwxrwx 1 ganiks ganiks       38 Dec 26 06:27 npm -> ../lib/node_modules/npm/bin/npm-cli.js
lrwxrwxrwx 1 ganiks ganiks       38 Dec 26 06:27 npx -> ../lib/node_modules/npm/bin/npx-cli.js

node-v10.15.0-linux-x64/lib/node_modules/:
total 4
drwxrwxr-x 10 ganiks ganiks 4096 Dec 26 06:27 npm

其實裡面是在 linux-x64 環境下已經編譯過的nodejs,怎麼用呢?

 

姿勢D:直接下載編譯過的包 分別部署到 /usr/local/bin 以及 /usr/local/lib/node_modules

【推薦指數:★★★☆☆】

看下這個包的結構,bin、include、lib、share貌似很眼熟啊,跟linux系統中的 /usr 目錄下的結構基本一致

ganiks@ganiks-ubuntu-trusty-64:~$ ls -l /usr/
total 48
drwxr-xr-x   2 root root 20480 Jan 18 09:48 bin
drwxr-xr-x   2 root root  4096 Apr 10  2014 games
drwxr-xr-x  33 root root  4096 Jan 18 09:48 include
drwxr-xr-x  69 root root  4096 Jan 18 09:48 lib
drwxr-xr-x  10 root root  4096 Jan 10 20:43 local
drwxr-xr-x   2 root root  4096 Jan 10 21:43 sbin
drwxr-xr-x 123 root root  4096 Jan 18 09:48 share
drwxr-xr-x   5 root root  4096 Jan 10 21:42 src

OK,那我的想法:把 node包下的 bin include lib share四個目錄分別跟 /usr下對應同名的目錄合併

但是註意一點,/usr這種系統目錄,以及目錄下的子目錄都是 root:root 的許可權,合併目錄後要保證這個一致性

之前這麼乾過,也一直在用,但是網路上沒怎麼見過這麼乾的,^_^

 

姿勢E:直接下載 編譯過的包 部署到 /usr/local/node 並修改 環境變數 $PATH

【推薦指數:★☆☆☆☆】

還是這個node包,另一種使用方式是整個包的使用,而不是像姿勢D中那樣拆開了

ganiks@ganiks-ubuntu-trusty-64:~$ sudo cp node-v10.15.0-linux-x64 /usr/local/node -r

#用root用戶修改系統文件,修改$PATH(永久生效,所有用戶生效)
root@ganiks-ubuntu-trusty-64:~/node-install# vim /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/node/bin"


#修改sudoers配置,否則普通用戶沒法用 sudo npm
root@ganiks-ubuntu-trusty-64:~/node-install# vim /etc/sudoers
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/usr/local/node/bin"

 

總結:

姿勢A:【推薦指數:★★★☆☆】源碼編譯安裝(慢哦慢,還要小心你的記憶體)

姿勢B:【推薦指數:★★★★★】添加PPA 用Ubuntu的方式安裝(不錯,這個方式很ubuntu)

姿勢C:【推薦指數:★★★★★】用NPM模塊【n】更新Node和NPM(不錯,這個方式很快,多版本管理更方便)

姿勢D:【推薦指數:★★★☆☆】直接下載編譯過的包 分別部署到 /usr/local/bin 以及 /usr/local/lib/node_modules(還行,有點雞賊)

姿勢E:【推薦指數:★☆☆☆☆】直接下載 編譯過的包 部署到 /usr/local/node 並修改 環境變數 $PATH(感覺像是Mount掛在系統上,而不是Installatioin,不建議)

 

更新於2019.01.19


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 此內容是個人學習筆記,以便日後翻閱。 非教程,如有錯誤還請指出 webpack 暴露全局變數 通過 expose loader 內聯配置 在 webpack中配置 每個模塊通過註入的方式 通過CDN的方式引入一個庫,並通過 webpack在項目中優化 通過 expose loader 內聯配置 ...
  • 一、概述 FormData類型是XMLHttpRequest 2級定義的,它是為序列化表以及創建與表單格式相同的數據提供便利。 作用:1.利用一些鍵值對來模擬一系列表單控制項:即將form中的所有表單元素的name和value組裝成一個queryString;2.非同步上傳二進位文件。 與普通Ajax相 ...
  • [toc] 首發日期:2019 01 19 前言: 有時候,一個後端開發者“不得不”自己去搭建前端界面。如果有的選,當然選一個比較好學的前端“框架”咯(框架很多時候封裝了普通的html元素,使得能更加方便地使用)。 如果你做的項目的界面是一個偏後臺管理的而且要求並不高的界面的時候,你可以考慮easy ...
  • 元素事件:滑鼠按下事件/滑鼠移動事件/滑鼠鬆開事件 元素樣式:讓元素脫離文檔流,採用絕對定位的方式。 一、滑鼠按下事件 當滑鼠在元素上面按下時,保存元素的初始偏移量和滑鼠按下時的坐標,然後在狀態變數裡面標記當前狀態為按下狀態。 二、滑鼠移動事件 當滑鼠拖動元素移動時,我們通過計算滑鼠從起始位到移動位 ...
  • 不知不覺我的第一個小程式已經上線一周了,uv也穩定的上升著。 很多人說我的小程式沒啥用,我默默一笑,心裡說:“它一直敦促我學習,敦促我進步”。我的以一個小程式初衷是經驗分享,目前先把經驗分享到博客園,邊學習邊完善小程式。同時我會持續學習,持續更新,功能定會一天天的完善起來。 歡迎大家掃碼體驗。 閑話 ...
  • 在結構上多一個指向自身的constructor構造函數,這就是原型鏈夠簡單吧. 利用原型鏈結構實現繼承和向鏈表中插入節點,有區別嗎? 沒區別!! ...
  • 先上效果 開發環境要求 需要事先安裝node及npm 前期準備 1.創建文件夾react-echarts-editor2.在項目根目錄(以下稱根目錄)下創建src目錄3.在項目根目錄下創建dist目錄4.在src目錄下創建app.js文件(該文件就來一個react-echarts版的hello wo ...
  • 前言 此內容是個人學習筆記,以便日後翻閱。 非教程,如有錯誤還請指出 Webpack 打包文件 支持JS模塊化 模式: production(0配置預設), development(生產環境) 更詳細的請前往 webpack官網 安裝 npm i webpack webpack cli D 執行 w ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...