日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Express新建工程以及新建路由规则、匹配路由规则、控制权转移

發布時間:2025/3/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Express新建工程以及新建路由规则、匹配路由规则、控制权转移 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

場景

npm提供了大量的第三方模塊,其中不乏許多Web框架,我們沒有必要重復發明輪子,
因而選擇使用Express作為開發框架,因為它是目前最穩定、使用最廣泛,而且Node.js官
方推薦的唯一一個Web開發框架。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載。

實現

安裝Express

首先需要安裝Express

npm install -g express

?

這里使用全局安裝-g,然后還需要安裝express-generator

npm install -g express-generator

?

然后可以通過

express --help

來查看相關幫助

?

新建Express工程

express -t ejs microblog

?

Express在初始化一個項目的時候需要指定模板引擎,默認支持Jade和ejs,這里使用ejs,同時暫時不添加CSS引擎和會話支持。

后面microblog是項目名,此時會生成此目錄以及目錄下文件

并且會提示我們進入其中并執行npm install

cd microblog npm install

?

安裝依賴成功。

啟動服務器

打開項目下的app.js,發現并沒有服務器的端口監聽,加上如下代碼

app.listen(3000,function () {console.log('服務端啟動在3000端口') })

然后啟動服務器

node app.js

打開瀏覽器訪問localhost:3000

?

新建路由規則

新建成的工程是自帶一個users示例路由

?

所以直接訪問

http://localhost:3000/users

?

就能直接訪問到routes下的users.js中的響應內容

?

仿照示例路由首先在app.js,添加路由匹配

app.use('/badao', badaoRouter);

badaoRouter在上面聲明

var badaoRouter = require('./routes/badao');

然后在routes目錄下新建badao.js

var express = require('express'); var router = express.Router();/* GET users listing. */ router.get('/', function(req, res, next) {res.send('這是來自badao--公眾號:霸道的程序猿'); });module.exports = router;

然后重啟服務器,訪問

http://localhost:3000/badao

?

路由規則匹配

有時需要根據傳遞的參數進行路由的匹配,比如傳遞名字,從而返回Hello+傳遞的名字參數。

在app.js中引入index根路由的方式是

app.use('/', indexRouter);

然后indexRouter是通過

var indexRouter = require('./routes/index');

在routes下index.js中

var express = require('express'); var router = express.Router();/* GET home page. */ router.get('/', function(req, res, next) {res.render('index', { title: 'Express' }); });router.get('/hello',function (req,res) {res.send('cunrrentTime is :'+new Date().toString()) });router.get('/hello/:username',function (req,res) {res.send('Hello:'+req.params.username); });module.exports = router;

又新增了兩個路由這樣,就可以通過app.js的路由加上此index.js中的路由進行匹配。

比如這里的訪問hello這個路由對應的方法

運行程序打開瀏覽器輸入

http://localhost:3000/hello

?

除此之外還可以獲取路由傳遞的參數進行動態顯示

router.get('/hello/:username',function (req,res) {res.send('Hello:'+req.params.username); });

使用:username來接受路由參數,進入響應Hello+參數。

啟動程序,然后在瀏覽器中輸入:

http://localhost:3000/hello/霸道的程序猿

?

控制權轉移

Express支持同一路徑綁定多個路由響應函數。但是當你訪問這兩條同樣的規則匹配到的路徑時,會發現請求總是

被前一條路由規則捕獲,后面的規則會被忽略。原因是Express在處理路由規則時,會優先匹配先定義的路由規則,

因此后面的規則被屏蔽。

Express提供了路由控制權轉移的方法,即回調函數的第三個參數next,通過調用next()將路由控制權交給后面的規則。

這讓我們可以實現中間件,而且還能提高代碼的復用程度。

例如針對用戶查詢信息和修改信息的操作,其中一個步驟是檢查用戶名是否存在,因此可以通過next()方法實現。

繼續使用上面的獲取路由參數的方式,在上面新增的路由badao.js中聲明一個對象和設置屬性值

var users = {'badao':{name:'badao',blog:'https://blog.csdn.net/BADAO_LIUMANG_QIZHI'} }

然后新增兩個同路徑匹配的路由

router.all('/:username',function (req,res,next) {if(users[req.params.username]){next();}else{next(new Error(req.params.username+'不存在'))} }); router.get('/:username',function (req,res) {res.send(JSON.stringify(users[req.params.username])); });

上面兩個路由首先走第一個驗證傳遞的username參數是否存在,不存在則返回錯誤,提示則調用next進而將對象信息返回。

badao.js完整代碼

var express = require('express'); var router = express.Router(); var users = {'badao':{name:'badao',blog:'https://blog.csdn.net/BADAO_LIUMANG_QIZHI'} } /* GET users listing. */ router.get('/', function(req, res, next) {res.send('這是來自badao--公眾號:霸道的程序猿'); });router.all('/:username',function (req,res,next) {if(users[req.params.username]){next();}else{next(new Error(req.params.username+'不存在'))} }); router.get('/:username',function (req,res) {res.send(JSON.stringify(users[req.params.username])); });module.exports = router;

然后重新運行項目,打卡瀏覽器輸入

http://localhost:3000/badao/bada

?

然后輸入正確的名字參數

http://localhost:3000/badao/badao

?

示例代碼下載

https://download.csdn.net/download/BADAO_LIUMANG_QIZHI/12969105

總結

以上是生活随笔為你收集整理的Express新建工程以及新建路由规则、匹配路由规则、控制权转移的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。