Expresshtml
原生的 http 在某些方面表現不足以應對咱們的開發需求,因此咱們須要使用框架來加快咱們的開發效率。框架的目的就是提升效率,讓咱們的代碼更高度統一前端
在Node 中,有不少 Web 開發框架,咱們這裏以學習express
爲主node
參考網址:http://expressjs.com/git
npm install --save express
var express = require('express') var app = express() app.get('/',function(req,res){ //推薦使用express的方法 res.send("hello world") }) app.listen(3000,function(){ console.log("express app is running ...") })
路由器github
請求方法express
請求路徑npm
請求處理函數json
get:數組
//當以 GET 方法請求 / 的時候,執行對應的處理函數 app.get('/',function(req,res){ res.send('hello world!') })
post:瀏覽器
//當以 POST 方法請求 / 的時候,執行對應的處理函數 app.post('/',function(req,res){ res.send('Get a POST request') })
// /public資源 app.use(express.static('public')) // /files資源 app.use(express.static('files')) // /public/xxx app.use('/public',express.static('public')) // /static/xxx app.use('/static',express.static('public')) app.use('/static',express.static(path.join(__dirname,'public')))
art-template
模板引擎安裝:
npm install --save art-template npm install --save express-art-template
配置:
//默認art app.engine('art', require('express-art-template')) //修改後html app.engine('html', require('express-art-template'))
使用:
//使用修改後html的配置 app.get('/',function(req,res){ //express 默認會去項目中的 views 目錄中找 index.html res.render('index.html',{ title:'hello world' }) })
注意:若是但願修改默認的views
視圖渲染存儲目錄,能夠:
//第一個參數 views 千萬不要寫錯 app.set('views',目錄路徑)
Express內置了一個API,能夠直接經過req.query
來獲取
req.query
注:在瀏覽器輸入的地址,默認都是get請求
在Express中沒有內置獲取表單POST請求體的API,這裏咱們須要使用一個第三方包:body-parser
安裝:
npm install --save body-parser
配置:
var express = require('express') //0.引包 var bodyParser = require('body-parser') var app = express() //1.配置 body-parser //只要加入這個配置,則在 req 請求對象上會多出來一個屬性:body //也就是說能夠直接經過 req.body 來獲取表單 POST 請求體數據了 // parse application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ extended: false })) // parse application/json app.use(bodyParser.json())
使用:
app.use(function (req, res) { res.setHeader('Content-Type', 'text/plain') res.write('you posted:\n') //能夠經過 req.body 來獲取表單 POST 請求體數據 res.end(JSON.stringify(req.body, null, 2)) })
注意:req.body
返回的對象屬性值都是字符串
咱們這裏可使用一個第三方命名工具:nodemon
來幫助咱們解決頻繁修改代碼重啓服務器問題
nodemon
是一個基於Node.js開發的一個第三方命令行工具,咱們使用的時候須要獨立安裝:
#在任意目錄執行該命令均可以 #也就是說,全部須要 --global 來安裝的包均可以在任意目錄執行 npm install --global nodemon
安裝完畢以後,使用:
#以前使用 node node app.js #如今使用 nodemon nodemon app.js
只要是經過nodemon app.js
啓動的服務,則它會監視你的文件變化,當文件發生變化的時候,它會自動幫你重啓服務器
模塊如何劃分:
模塊職責要單一
Vue
angular
React
也很是有利於學習前端三大框架
初始化
模板處理
router.js:
/* router.js 路由模塊 職責: 處理路由 根據不一樣的請求方法+請求路徑設置具體的請求處理函數 */ // 模塊職責要單一,不要亂寫 // 劃分模塊的目的就是加強項目代碼的可維護性,提高開發效率 var express = require('express') //1.建立一個路由容器 var router = express.Router() //2.把路由都掛載到 router 路由容器中 router.get('/students', function(req,res){ }) router.get('/students/new',function(req,res){ res.render('new.html') }) router.post('/students/new',function(req,res){ }) router.get('/students/edit',function(req,res){ }) router.post('/students/edit',function(req,res){ }) router.get('/students/delete',function(req,res){ }) //3.把 router 導出 module.exports = router
app.js:
var router = require("./router") //掛載路由 app.use(router)
/* student.js 數據操做文件模塊 職責:操做文件中的數據,只處理數據,不關心業務 */ /* 獲取全部學生列表 return 數組 */ exports.find = function(){ } /* 添加保存學生 */ exports.save = function(){ } /* 更新學生 */ exports.update = function(){ } /* 刪除學生 */ exports.delete = function(){ }
處理模板
配置開放靜態資源
配置模板引擎
簡單路由: /students 渲染靜態頁出來
路由設計
提取路由模塊
因爲接下來一些新的業務操做都須要處理文件數據,因此咱們須要封裝 student.js
先寫好 student.js 文件結構
查詢全部學生列表的 API find
findById
save
updateById
deleteById
實現具體功能
經過路由收到請求
接收請求中的數據(get、post)
req.query
req.body
使用數據操縱 API 處理數據
根據操做結果給客戶端發送響應
業務功能順序
列表
添加
編輯
刪除
ES6的兩個重要API:find、findIndex