前在最前
本文適合於已經有一定的JavaScript基礎,准備用JS來寫WEB后端的開發者們。本文主要是以實戰記錄的方式來分享完整項目的搭建。
本文將演示如何用nodejs來搭建一個WEB后端項目,采用純JavaScript開發(js)。
本文案例文件下載地址:源碼,寫於2022年3月15日
關鍵詞
WEB后端、express、nodejs、babel、nodemon
大家一般說的node其實就是指nodejs,nodejs后端和js后端、node后端是一回事。javascript與nodejs的關系就像java與jvm的關系,javascript是開發語言,nodejs是運行容器。
express是優秀的WEB框架(http://www.expressjs.com.cn/),提供基礎的http服務,解決諸如路由、傳輸、請求等的處理,是核心的WEB庫,因為現在都是前后端分離的結構,所以本文定位其是WEB后端。
nodemon是一個開發輔助工具,可以運行nodejs代碼並監測項目代碼變化,自動刷新並自動運行,大大提高開發效率。
babel是一個解決ES6等更高級語法的轉換工具,可以讓項目支持用import、const、let、async\await等新語法的轉換庫。
可以看得出來,核心是運用nodejs完成搭建express服務。其他都是為了提升開發效率衍生的。
一、安裝環境,完成nodejs\nodemon安裝
1、nodejs安裝,從官網下載:https://nodejs.org/en。
一般都是用windows開發,所以下載后是一個exe文件安裝包,直接雙擊安裝,一路next即可,過程略。
驗證安裝成功:在cmd命令窗口中,輸入:node -v ,會返回版本號則代表成功安裝,如下:
2、安裝nodemon,在cmd命令窗口,輸入:npm i nodemon -g ,會自動安裝,如下:
說明:npm 是隨着nodejs一起安裝的一個包管理工具,npm i = npm install ,表示安裝XX包。nodemon是具體要安裝的包名稱。-g表示全局安裝,可以支持在不同的項目都使用。
二、項目初始化,搭建helloword.
1、任意目錄建立項目文件夾,比如d:\code\js,建立hello文件夾。
2、初始化項目文件夾。cmd切換到項目文件夾下,執行npm init命令,按提示一路回車即可。如下:
按提示完成后,項目文件夾下,會生成一個package.json配置文件。
注:npm init初始的相關信息,都會在該文件中記錄,這個文件稱為項目配置文件。
3、安裝express,建立index頁。
cmd中,執行:npm i express,回車后,等待下載,完自動安裝完成:
看到上面這樣,沒有Error,就說明成功了。
在項目文件夾下,建立index.js文件,內容如下:
# index.js
# 用express創建一個app對象,在本地3000端口運行一個http服務,開通一個/根路由的節點。
# 本示是express官網示例,具體看express官網解釋。
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
到此為止,項目文件夾下,文件目錄應該如下:
注:node_modules是npm下載的包,package.json是配置文件,index.js是我們的代碼文件。package-lock.json是臨時文件,不用管。
4、運行代碼,看helloWorld.
cmd中執行:node index.js,即可執行代碼,效果如下:
注:當看到控制台上有顯示上面的語句時,表示啟動成功。
接下來,我們驗證一下效果,打開瀏覽器,訪問http://localhost:3000,會提到Hello World!
三、項目集成nodemon,方便開發調試,實現代碼熱更新。
在實際開發過程中,代碼需要經常改動,每次改動都需要通過命令node index.js來運行,效率不高。所以我們引入nodemon這個工具。
1、規范目錄結構,將代碼統一放到src文件夾下(新建一個src文件夾)。
暫時我們項止只有一個Index.js文件,移到項目文件夾的src文件下。結構如下:
2、修改package.json文件,采用nodemon啟動代碼。
{ "name": "server", "version": "1.0.0", "description": "", "main": "src/index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "nodemon --watch src --watch config src/index.js" }, "author": "", "license": "ISC", "dependencies": { "express": "^4.17.3" } }
改動說明:在scripts對象中,增加了start這一行,表示執行start腳本時,即執行nodemon命令。同時將main修改為src/index.js,表示代碼從src/index.js開始運行。
3、cmd中,執行npm run start,運行項目。
(之前運行的cmd窗口,按ctrl+c 兩次結束,再執行),如下:
OK,到這里為止,nodemon集成已經完成,這樣當修改了index.js中相關代碼,項目會自動刷新,不需要手動關掉項目了。比如,我修改了res.send內的內容,cmd窗口會自動刷新,刷新網頁,會看到內容也變了,如下:
這樣,我們就可以只專注寫代碼了,不用管運行的事了,去express官網看更多的示例吧,比如把app.use(),app.router等加進去,寫更多的XX.js文件,都會即時生效了。
四、項目集成babel,支持ES6等新語法。
寫着寫着,你發現連基礎的Import都無法使用,await async也不能用。比如,我const一個常用,它就報錯了:
別急,這是因為你用的語法太新了,是ES6以后的新語法,我們需要用babel轉換一下。
1、安裝babel相關的庫支持。cmd執行以下命令:
npm install babel babel-node babel-cli --save-dev
npm install --save-dev babel-core babel-loader babel-preset-env babel-preset-react
npm install babel-preset-env --save-dev
*以上命令請自行百度用途,先照着做,npm會自安裝相關的包。其中 --save -dev表示僅保存到當前項目和調試環境。
安裝完以后,會自動更新package.json文件,安裝完以后,內容應該如下:
注:重點在devDependencies中增加了相關的babel庫支持。
2、修改start腳本。
在package.json,將scripts的start命令,增加 --exec babel-node命令,完整如下:
"start": "nodemon --watch src --watch config src/index.js --exec babel-node"
3、重新運行項目。
cmd中,執行:npm run start,
OK.看到熟悉的3000端口,表示一切正常。
**************************************************************************************** 我是分隔線,到目前為止,其實你就可以去玩代碼了 ,寫你需要的代碼,擴充你的項目了 ****************************************************************************************
五、項目打包
項目寫好了,如何發布交給運維到服務器部署呢?我們直接需要引入build命令和serve命令。
1、在package.json中配置如下命令:
"build": "babel src -d dist","serve": "node dist/index.js",完整的文件如下:
{ "name": "server", "version": "1.0.0", "description": "", "main": "src/index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "nodemon --watch src --watch config src/index.js --exec babel-node", "serve": "node dist/index.js", "build": "babel src -d dist" }, "author": "", "license": "ISC", "dependencies": { "express": "^4.17.3" }, "devDependencies": { "babel": "^6.23.0", "babel-cli": "^6.26.0", "babel-core": "^6.26.3", "babel-loader": "^8.2.3", "babel-node": "0.0.1-security", "babel-preset-env": "^1.7.0", "babel-preset-react": "^6.24.1" } }
2、當我們寫好項目后,用npm run build進行打包。打包后,會在項目文件夾生成dist文件夾,這里面存放的項目運行代碼
然后將dist文件夾所有文件打包丟給運維就行了。
3、運維如何管理?
你需要把package.json+dist文件夾一起打包給運維。運維執行直接執行:npm i ,就可以安裝所有的包。
然后執行npm run serve命令運行相關后端服務。
當然,一般運維會用pm2來部署,即pm2 start dist/index.js --name server
寫在最后
到目前為止,完成了nodejs開發后端的環境准備、基本項目的搭建,並有一個簡易的http服務。
要讓你的項目完成更出色的功能,請多查看express官網教材。
當然,npm是一個好東西,當你看到代碼中有import 或require一些第三方包時,你可以直接npm i XXX --save 來安裝(別忘了加--save)。
如果項目COPY到新電腦時,node_modules是可以不用COPY的,在新電腦上執行npm i 命令,會自動下載全部引用的包。
現在,你已經可以開始一個項目的實戰,下一篇,我將介紹一個實戰項目的代碼開發。重點是express的路由的拆分與攔截器的設計,確保后端接口安全。
再接下來,我將會介紹ORM框架的使用。