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新建工程以及新建路由规则、匹配路由规则、控制权转移的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS中怎样获取当前年以及前后几年并构造成
- 下一篇: Express中使用ejs新建项目以及e