Express框架简介、express使用模块引擎、模式数据
Express簡介:
原生的http不足以應對我們的開發需求,所以我們需要使用框架來加快我們的開發,這里推薦expressjs,其官網:expressjs.com,中文文檔推薦:http://javascript.ruanyifeng.com/nodejs/express.html#toc0
Express是目前最流行的基于Node.js的Web開發框架,可以快速地搭建一個完整功能的網站。
Express上手非常簡單,如下簡介:
// 1.安裝express:npm install express --save(使用淘寶鏡像安裝的:npm --registry https://registry.npm.taobao.org install express)// 2.引包:var express = require('express');// 3.創建服務器應用程序:(類似原生中createServer)var app = express();// 4.業務設計(路由設計):// 以get的方式對一個路徑作出處理,這也是路由。get中第一個參數為訪問路徑,第個為回調函數(回調函數第一個參數為請求對象,第二個為響應對象):這樣的路由可以指定多個。app.get('/', function(req, res) {res.send('index.html');//響應瀏覽器訪問,類似原生中end();req.files;//}).get('/users', function(req, res) {//這里類似jQuery中的鏈式調用res.send('users.html');});// 以post的方式對一個路徑作出處理,這也是路由。post中第一個參數為訪問路徑,第個為回調函數(回調函數第一個參數為請求對象,第二個為響應對象):這樣的路由可以指定多個。app.post('/login', function(req, res) {res.send('login.html');res.redirect(301, "/index.html");//網頁重定向,第一個參數可以省略,為狀態碼;第二個參數是重定向的路徑,這里可以寫網址或相對文件路徑。res.sendFile("/faded.mp3");//用于發送文件(各種類型文件)res.render("index", { message: "Hello World" });//用于渲染網頁模板,第一各參數為模板;第二個參數對象為模板中需要的變量及值。});app.listen(3000,function(){console.log(running...);});//設定監聽端口,回調函數可以省略,表示應用啟動成功后作出反應。express-中間件:
處理http請求的函數被稱為中間件,每個中間件可以接收三個參數(請求對象、響應對象、next回調函數代表下一個中間件);如:
function middleware(req, res, next) {next('出錯了!');//next如果傳入了參數,那么這個參數代表拋出一個錯誤;如果這里不調用next,那么下面的中間件將不再執行。};express-use:
use()方法用于注冊中間件,如:
app.use(function(request,response,next){console.log(request.url);response.end('hello');});//利用use開放資源:將資源開放后,可以通過url訪問到此資源,如:app.use('/public/',express.static('./public/'));//第一個參數是別名,建議和后面的開放資源的URL一樣,也可以省略,省略后直接訪問public中的文件即可,不用再訪問public此文件夾路徑,/后面跟被開放的URL目錄中的文件名,express-set:
set方法用于設置變量的值,如:
app.set('avator',_dirname + '/avator');//第一個參數是變量名,第二個參數是變量的值。router路由模塊:
// 在入口app執行node代碼的情況下,路由模塊載入可以使用函數傳參數app的方式:不推薦方式,不合理,如:module.exports = function (apps) {apps.get('/students', function (req, res) {// readFile 的第二個參數是可選的,傳入 utf8 就是告訴它把讀取到的文件直接按照 utf8 編碼轉成我們能認識的字符 , 除了這樣來轉換之外,也可以通過 data.toString() 的方式fs.readFile('./db.json', 'utf8', function (err, data) {if (err) {return res.status(500).send('Server error.')}// 從文件中讀取到的數據一定是字符串 ,所以這里一定要手動轉成對象var students = JSON.parse(data).students;res.render('index.html', {fruits: ['蘋果','香蕉','橘子'],students: students})})})// 推薦方式:express提供了專門的路由設計的模塊:Router(),在載入express模塊的情況下使用方法如下:// 1.創建一個路由容器:var router = express.Router();// 2.把路由掛載到路由容器中:router.get('/public', function(request, response) {});router.post('/public', function(request, response) {});// 3.導出router:module.exports = router;// 4.在入口app中載入Router模塊:var router = require('./router');// 5.把router掛載到app中:app.use(router);path模塊:
var path = require('path');// path是一個核心模塊,簡單介紹常用API:path.basename('C:/e/fs/f/index.html') //'index.html'-----返回的是一個目錄中的文件名及后綴名path.basename('C:/e/fs/f/index.html', '.html') //'index'-----basename可以傳入第二個參數(.文件后綴名),此時返回的僅是文件名,不包括后綴名path.dirname('C:/e/fs/f/index.html') //'C:/e/fs/f'------獲取路徑中文件的目錄,不包括文件名及后綴名path.extname('C:/e/fs/f/index.html') //'.html'-------獲取路徑中文件的擴展名(后綴名)path.isAbsolute('C:/e/fs/f/index.html') //true -----判斷一個路徑是否為絕對路徑path.isAbsolute('/e/fs/f/index.html') //true------ / 開頭表示的是文件磁盤根目錄,所以是絕對路徑path.isAbsolute('./e/fs/f/index.html') //false------ ./ 開頭表示的是文件當前目錄,所以不是絕對路徑,為相對路徑// 拆分一個路徑的API:path.parse():path.parse('C:/e/fs/f/index.html') //解析得到一個對象:// {// root: 'C:/',// dir: 'C:/e/fs/f',// base: 'index.html',// ext: '.html',// name: 'index'// }path.join('./a', 'b') //'a\\b'-----路徑拼接,實際是a/b,解決路徑字符串拼接的難題,兩個反斜杠是操作系統導致的,body-parser中間件:
默認是不能解析post方式提交的請求體的,body-parser中間件(插件)專門用來解析表單 POST 請求體,其用法如下:
//1.下載安裝body-parser插件:npm install body-parser --save//2.引入body-parser模塊:var bodyParser = require('body-parser');//3.配置body-parser核心部分:app.use(bodyParser.urlencoded({extended: false}));// parse application/x-www-form-urlencoded,解析post請求數據app.use(bodyParser.json());// parse application/json,數據為JSON類型//4.接收以post提交的數據:app.post('/post',function(request,response){console.log(request.body);//request.query只能拿到以get方式提交的數據;配置完后require會有一個新的body屬性,這個屬性request.body可以拿到以post提交的數據});也可以使用暫存請求體的方式接受post提交數據,如:
var http = require('http');var querystring = require('querystring');var util = require('util');http.createServer(function(request, response) {// 定義了一個post變量,用于暫存請求體的信息var post = '';// 通過request的data事件監聽函數,每當接受到請求體的數據,就累加到post變量中request.on('data', function(chunk) {post += chunk;});// 在end事件觸發后,通過querystring.parse將post解析為真正的POST請求格式,然后向客戶端返回。request.on('end', function() {post = querystring.parse(post);response.end(util.inspect(post));});}).listen(3000, function() {console.log('running...');});express中使用art-template模板:
art-template模板也可在node中使用,其具基本用法如下:
var express = require('express');var app = express();//在Express中配置使用art-template的步驟:// 1.在github上搜索art-template打開官方文檔,官方文檔導航欄中有Express點進去查閱相關說明,步驟如下一步:// 2.分別安裝art-template和express-art-template:打開命令窗口分別鍵入命令:npm install --save art-template 和 npm install --save express-art-template ;(當然這里可以同時安裝兩個包,鍵入命令:npm install --save art-template express-art-template);express-art-template是專門在express中把art-template整合到express中的包,原因是express-art-template依賴了art-template。// 3.配置使用art-template模板引擎:app.engine('html', require('express-art-template')); //第一個參數表示渲染以 .art 結尾的文件的時候使用 art-template 模板引擎,注意需要渲染的頁面文件后綴名修改為art,當然不也可以修改 app.engine() 中第一個參數值為html,這樣就不用再修改文件后綴名// 4.渲染數據到模板引擎(使用):app.get('/', function(require, response) {response.render('index.html', { //Express 為 Response 相應對象提供了一個方法:render,render 方法默認是不可以使用,但是如果配置了模板引擎就可以使用了,其用法:res.render('html模板名', {模板數據})name: 'jkon',//render 第一個參數不能寫路徑,默認會找view目錄中的模板文件(express約定開發人員把所有視圖文件放到view目錄中),如果想要修改默認view目錄,使用 app.set('view','新的路徑'):message: 'hello word',dateTime: '2020-11-7'}); //注意需要渲染的頁面文件后綴名修改為art,當然不也可以修改 app.engine() 中第一個參數值為html,這樣就不用再修改文件后綴名});art-template中子模板和繼承模板:
<!-- 在node中有很多第三方模板,不同的模板語法不同,其他模板如:ejs、jade(pug)、handlebars、nunjucks --><!-- 子模板的使用:在界面需要填充公共內容的地方直接插入公共代碼:{{ include './header.html'}} ,插入的是相同的區域。 -->{{ include './header.html'}}<!-- 模板繼承:在一個界面中,公共部分非常多,不同的部分只有一點,可以通過改變不同部分區域來實現,和上面子模板差不多,只是插入的是不同區域。 --><!-- 要繼承的界面: -->{{ block 'content'}}<!-- <p>默認內容</p> ,如果在新的頁面沒有修改這里,則默認渲染此模板中的默認內容和此坑以外的界面,如果需要修改默認內容,則需在新的頁面使用block并修改其中的默認部分-->{{ /block }}<!-- 新的頁面: --><!-- 在新的頁面渲染繼承的界面,默認內容 + 繼承頁面坑以外的內容 -->{{ extend './conent.html'}}<!-- 默認內容被修改了 -->{{ block 'content'}}<!-- <div>這是修改后新的內容 + 繼承頁面坑以外的內容</div> -->{{ /block }}express中使用cookie和session:
在express中默認是不支持Session和Cookie, 但是我們可以使用第三方中間件: express - session, 使用步驟如下:
// 1.下載安裝:// 在cmd中npm install express-session// 2.引包:var Session = require('express-session');// 3.配置:app.use(session({secret: 'keyboard cat', //配置加密字符串,在原有的字符串上拼接,增加安全性,括號里的字符自定義resave: false,saveUninitialized: true //無論是否使用session,都會分配一把鑰匙,當值為false時,默認是不會分配鑰匙,需要自己設置。}));// 4.使用:當配置好插件后,可以通過require.session來訪問和設置Session成員:添加:require.session.foo = 'bar' ;訪問:require.sessionapp.use(function(require, response, next) {if (!require.session.login) {require.session.login = {};};});express中的中間件:
var express = require('express');var app = express();// 中間件:處理請求的,本質就是一個函數,這個函數有三個形參,repuest----請求結果,response----響應結果,next-----下一個,調用下一個中間件的參數。// express中的中間件有幾種分類:// 1.任何請求都會進入型(不關心請求方法和請求路勁),如:app.use(function(repuest,response,next){console.log('test')next();//---------------------------------如果不調用此下一個中間件,是不會繼續向下一個中間件執行的,當有多個中間件時,必須調用下一個才會執行下一個,當然next也是調用匹配條件的。// next(err);next可以傳遞參數,如果傳遞了參數,當發生錯誤的時候,則直接往后找到帶有 四個參數的應用程序級別中間件,可以用來處理全局錯誤。});app.use(function(repuest,response,next){console.log('test')});// 2.關心請求路徑型,以/x開頭的路徑都會進來,必須是以/x 開頭 ,強調‘開頭’如:app.use('/a',function(repuest,response,next){console.log('test')});// 3.get和post是嚴格模式的,表示以/a為請求時才執行里面的代碼。app.get('/a',function(repuest,response,next){console.log('test')});app.post('/a',function(repuest,response,next){console.log('test')});// 四個參數的中間件:app.use(function(error,require,response,next){res.status(500).send('This is error')});mock模擬數據:模擬數據接口的數據,提高前端開發效率,實際就是一個json文件,不同router定義不同意義的接口。
提示:本文圖片等素材來源于網絡,若有侵權,請發郵件至郵箱:810665436@qq.com聯系筆者刪除。
筆者:苦海
總結
以上是生活随笔為你收集整理的Express框架简介、express使用模块引擎、模式数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++获取当前时间戳_python开发:
- 下一篇: chartjs和echartsjs库简介