使用node+express搭建第一個node后端項目
提綱
0、express的簡介
1、不使用express的情況下用node實現后端項目
2、使用express 手動創建一個node后端項目的步驟
3、使用express-generator創建一個node后端項目的步驟
4、使用nodemon、forever、pm2去守衛node進程
0、express的簡介
Express 是一個簡潔而靈活的 node.js Web應用框架, 提供一系列強大特性幫助你創建各種Web應用。
Express 不對 node.js 已有的特性進行二次抽象,express只是在nodejs的基礎上(比如http模塊)擴展出了Web應用所需的功能。
包含了豐富的HTTP工具以及來自Connect框架的中間件,這些工具和中間件都可以隨取隨用,從而幫助用戶快速地創建強健、友好的API。
簡而言之,express完全是由路由和中間件構成的一個框架。從本質上來說,一個express應用就是通過調用各種中間件來創建自己的應用。
(中間件(middleware),這個概念在這里是指一個函數。
這個函數可以訪問request對象和響應對象(res) ,同時處理請求。
中間件的功能是如下幾個:
- 可以執行任何代碼
- 可以修改請求和響應對象
- 可以結束請求響應循環
- 可以調用堆棧中的下一個中間件
- 如果中間件沒有執行結束請求響應流程,他需要通過next() 將控制權傳遞給下一個中間件函數
Tips:我們把結束請求響應流程的方法稱為是句柄函數
)
1、不使用express的情況下用node實現后端項目
在不使用express這樣的web后端框架的時候,如果想用node實現一個后端的項目,我們要做很多。
下面是一個簡單的示例,從示例中可以看出,我們要自己實現web服務器。
當然,如果要讓下面的項目響應接口請求,那么還要增加的更多的基礎功能。這樣就會特別復雜,而且這些基礎功能是有共性的,這些共性的基礎功能,可以抽出來做成一個框架,這就是express等提供的功能了,也是它誕生的原因。
var http = require("http");
http.createServer(function(request, response){
response.writeHead(200, {"Content-Type": "text/plain"});
response.end("hello, world\n");
}).listen(8888);
console.log("Server running at http://127.0.0.1:8888");
2、使用express創建一個node后端項目的步驟
這里以expresstest1項目為例來做一個介紹。
(1)創建項目文件夾mkdir expresstest1,然后在文件夾下使用命令npm init生成package.json文件
注意這里要將package.json中的main字段值修改為app.js,同時給scripts字段增加一個項,"start": "node app.js"。
(2)安裝Express,使用如下的命令
npm install express -g
(3)在項目文件夾中新建app.js文件,添加以下代碼。
var express = require('express');
var app = express();
// 路由中間件:get請求"/"資源
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
// 應用程序會啟動服務器,並在端口 3000 上偵聽連接。
// 此應用程序以“Hello World!”響應針對根 URL (/) 或路由的請求。
// 對於其他所有路徑,它將以 404 Not Found 進行響應。
// req(請求)和 res(響應)與 Node 提供的對象完全相同,
// 所以您可以在不涉及 Express 的情況下調用 req.pipe()、req.on('data', callback) 和要執行的其他任何函數。
(4) 運行npm start。
運行的時候,會報錯說,找不到express。這是因為,我們之前安裝express的時候,是全局安裝,在目前的項目下要使用的時候,需要npm link express一下,這樣就不會再報錯了。
運行后,可以在瀏覽器中輸入:http://localhost:3000/,這時候,會出現如下畫面:
這樣一個基於node和express的后端項目就完成了,這個項目可以響應對/接口的訪問請求。
3、使用express-generator創建一個node后端項目的步驟
如果你覺得自己創建Express應用程序比較麻煩,可以使用命令$ npm install express-generator -g 全局安裝express-generator,express-generator是一個應用生成器。
安裝完成后使用命令express prjName 即可生成應用程序,這個命令在生成項目之前會自動在當前目錄下創建項目文件夾prjName,並且以prjName為名字的項目文件夾下,創建項目的各種文件。
或者,使用命令 express -e prjName 可以生成一個 基於 ejs模板引擎 的應用程序,這個命令同樣會在當前目錄下創建項目文件夾,並且在項目文件夾下自動創建項目所需的各種文件。
下面的示例是基於 ejs模板引擎 生成應用程序,應用程序的名字是test。
(1) express -e 生成應用程序
(2) 完成以后我們使用命令npm install生成項目依賴文件
(3) 運行后端項目。我們基於package.json文件中的配置,使用命令npm run start運行start任務,當腳本任務為start時可以簡寫run,即npm start。
以上命令輸出表示項目正常運行。
接下來,我們直接訪問地址localhost:3000,就可以看到項目對根路徑/的響應。
(4) 我們可以更改腳本任務,可以修改package.json文件里的start任務,使用nodemon或者supervisor監聽服務器源代碼的修改,自動重啟服務器,所謂自動重啟服務器指的是當代碼修改后,不需要重新npm start,直接刷新瀏覽器,就可以看到修改代碼的效果。
使用前提是全局安裝nodemon或者supervisor:
// 全局安裝supervisor:
npm install supervisor -g
// 全局安裝nodemon:
npm install nodemon -g
下面以nodemon示例,將script中start任務中node替換為nodemon,如果是supervisor則將node改為supervisor。之后運行命令npm start即可。
4、使用nodemon、forever、pm2去守衛node進程
node 程序運行中不能碰到錯誤,如果遇到錯誤,node進程就會死掉。所以forever誕生了,forever可以守衛node進程,node掛了后,會自動重啟。
// forever
// 全局安裝
npm install forever -g
// 啟動node服務
forever start app.js
// 停止node服務
forever stop app.js
// 監聽當前文件,當有文件變動時自動重啟node應用。
forever start -w app.js
除了forever之外,pm2也是一個功能和forever類似的命令,也可以自動重啟node進程。
// 使用pm2
// 全局安裝pm2
npm install -g pm2
// 創建軟連接,使全局可以使用pm2命令
ln -s /usr/local/node/bin/pm2 /usr/local/bin/pm2
//開始管理
pm2 start app.js
// 查看運行狀態
pm2 list
//日志
pm2 logs
//重啟
pm2 restart yourappid
//停止
pm2 stop app.js
參考資料:
1、這是主力參考資料,https://www.jianshu.com/p/31c48bf24176
2、這是第二主力參考資料,https://www.jianshu.com/p/de7495d239a2
2、https://www.jianshu.com/p/fc7664e9025c,nodemon的介紹
3、https://mp.weixin.qq.com/s?src=11×tamp=1630565954&ver=3289&signature=Ckw1Iu5jO**T1VhUN6oiMMYpp6HPWaNZeLRguRUEjkj6eNOTEgeD0mwonBW-0HM8GXfr2iXXR2bwprm877tlKXk1IwQW0RXUfHk0nA8ogefKD7dISUaHyDnbScp7&new=1,這里有https和ssl的配置內容。
4、https://blog.csdn.net/weixin_43715214/article/details/111940624,Express框架(一)——入門,這一篇比較清晰一點,更容易理解。
5、https://zhuanlan.zhihu.com/p/81663386,又一篇pm2的介紹
6、https://www.cnblogs.com/chyingp/p/pm2-documentation.html,pm2的一篇介紹,更加詳細一點,對照前兩篇看會有很大收獲
7、https://mp.weixin.qq.com/s?src=11×tamp=1631168312&ver=3303&signature=29mEXC5-rKlALYEy8xveXl57rhgC-Ltn0NmVhpQvZGW6D2iMWxgzARvQI-Niv0yxttpJ8l3N0TWqJ57iMpij0oU9POc7e-Erl5eY8DypbymnXz0KzUhC2hyLE7*jKwGg&new=1,(這篇文章題目叫 express框架核心原理全揭秘,是非常值得看的,如果上面的連接打不開了,可以直接搜索這個文章的題目找到它)