創建 Express 項目
安裝
npm i -g express-generatorornpm i -g express-generator@4# 注意:Windows有可能碰到提示:npm : 無法加載文件 C:\Program Files\nodejs\npm.ps1,因為在此系統上禁止運行腳本。
# 如果碰到這個錯誤,需要用`管理員身份`打開PowerShell,然后運行:
Set-ExecutionPolicy RemoteSigned
創建項目
# 創建項目
express --no-view clwy-api //clwy-api是項目名稱# 注意:Windows有可能碰到提示:express : 無法加載文件 C:\Program Files\nodejs\express.ps1,因為在此系統上禁止運行腳本。
# 如果碰到這個錯誤,需要用`管理員身份`打開PowerShell,然后運行:
Set-ExecutionPolicy RemoteSigned# 進入項目之中
cd clwy-api
這里要注意,我們使用了--no-view參數
,它的意思是不需要任何視圖模板,因為我們這個項目專門做后端接口的。將來渲染頁面會使用Vue
和React
之類的框架,所以不需要視圖。然后我們項目的名字叫做clwy-api
項目創建成功后,通過命令,安裝依賴包。
npm i
or
npm install
最后,運行命令,啟動服務
npm start
現在就可以通過?http://localhost:3000,來訪問我們的第一個項目了。
?輸出 json
繼續來改,我們這個項目是專門開發接口的,而接口所需要的是json
格式,而不是直接輸出HTML
。
那么找到routes/index.js
文件,將中間這行改為
router.get('/', function (req, res, next) {res.json({ message: 'Hello Node.js' });
});
它的意思就是以json
格式來輸出?Hello Node.js
這時候我們刷新瀏覽器,會發現它沒有任何變化,還是顯示以前的內容。這是因為當修改代碼后,Express
并沒有一直監聽我們的修改,運行的一直是之前的東西。想要顯示最新修改的內容,需要重啟服務。
回到命令行,按ctrl + c
鍵,可以停止服務,接著再次運行npm start
來啟動服務。接著還要刪掉public/index.html
文件。
注意:請務必刪掉index.html
。很多同學到這里沒有刪掉index.html
就去訪問了,會導致無法顯示json
數據。
刷新瀏覽器后,可以看到返回的json
數據了
美化JSON格式
瀏覽器安裝 JSON-handle插件
nodemon 監聽修改?
?安裝nodemon包
npm i nodemon
?然后打開項目根目錄下的package.json
,將start
這里修改為
"scripts": {"start": "nodemon ./bin/www"
},
重啟項目
npm start
修改內容無需重啟,我們直接刷新,可以看到顯示的內容
總結
- 開發
Node.js
項目,要先安裝express-generator
,這樣才能使用命令,創建項目 - 創建項目的命令是
express --no-view
?加上項目名
- 后端接口所使用的格式是:
json
,而不是:HTML
- 還要給項目安裝、配置
nodemon
,這樣Express
才能監聽你的代碼
項目結構
使用express-generator
建好的項目,都是這個結構。現在我們一一分析下,它們都是用來干嘛的
bin/www
在package.json
中,大家見過這個文件的配置。它是用來啟動項目的文件,無需修改,也不用管它,知道它是干嘛的就好了。
node_modules
展開后,會發現里面有非常多的文件。這就是當我們使用npm i
命令后,安裝的項目依賴包。我們也不用管它,甚至將它們刪掉都沒關系。因為當你再次運行npm i
后,它又會重新出現的。
public 目錄
這里放的各種靜態資源,例如 CSS、圖片等等靜態資源。但因為我們項目是專門開發接口的,所以這里的東西,大家完全不需要管它,根本用不上。
routes
這里是程序的路由部分,路由簡單的理解就是將不同網址,分別對應到不同的程序代碼上去。咱們開發項目,最重要的就是這個目錄了,后面我們開發要寫的代碼主要也都是在這里。
app.js
這個文件也很重要,在開發中,我們需要做一些路由的配置、跨域配置,都會來修改它的。
package.json
這里主要記錄的是項目的基本信息,和一些依賴包的情況。
package-lock.json
最后一個是package-lock.json
,它是用來鎖定npm i
時,安裝依賴包的版本號。并且將代碼發給其他人后,保證其他人在npm i
時,所使用的依賴包版本號能一致。這個文件刪掉后,運行npm i
也會自動重新生成的。
所以我們在開發中,目前要關注的就是router 目錄
?和?app.js
,其他文件都無需理會。
?
上面兩行就是引入express
,定義了路由 (router),路由就是用來設置訪問地址的。它可以將不同的訪問地址,與一個個不同的方法對應起來。?
?簡單的了解一下路由?
?
注意看,這里有個get
。get
是請求的一種,我們后面還有碰到其他的請求。get
請求大家就簡單的理解成,用戶訪問瀏覽器了。get
后面是/
,這是訪問地址的路徑。
可以嘗試做一個修改,將/
改為/hello
現在刷新頁面,瀏覽器會提示你?Cannot GET /
,接著我們訪問?http://localhost:3000/hello,又會正確的顯示內容了。
req、res 和 next?
接著這里有個function
,它就是當前路由/hello
訪問后,所對應的,要運行的函數。它里面有三個參數,分別是:req
、res
和next
。
req
req
是Request
的縮寫,也就是請求
的意思。通過req
,我們可以獲取到用戶通過URL
,或者表單傳遞給我們的數據。例如用戶提交了一個關于注冊的表單,我們就可以從req
中取出用戶提交的數據,從而進一步存入到數據庫中,保存起來。現在請先稍等一下,后面我們很快就會學習到相關的知識了。
res
res
是Response
的縮寫,也就是響應
的意思。通過res
,我們可以對用戶的請求做出響應。例如這里的
它的意思就是,當用戶訪問了?/hello
?后,要通過json
這種格式,顯示一段歡迎信息給用戶看。這樣用戶的瀏覽器上才能正確的顯示數據啊。
next
最后的next
,沒錯,它就是下一步
的意思。它允許我們在當前函數中對請求進行一些處理,然后再傳遞給下一個函數。
導出模塊
最底部的module.exports = router
,這是Node.js
中一種導出模塊的方式。在所有的路由文件中,你都將見到這一行,而這是必須存在的。因為只有這樣寫了以后,app.js
中,才能正確的引用到我們當前的路由文件
?總結
- 目前開發中,只需要關注
routes 目錄
和app.js 文件
就好了,其他的都不用管它。 - 路由的作用,就是讓瀏覽器的訪問地址,與代碼段對應起來
- 推薦使用
ES 6
語法,用const
、let
來代替var