服務端框架搭建及優化
阿新 • • 發佈:2020-12-16
Node 簡介
Node 是一個基於V8引擎的Javascript執行環境,它使得Javascript可以執行在服務端,直接與作業系統進行互動,與檔案控制、網路互動、進行控制等
Chrome 瀏覽器同樣是集成了V8引擎的Javascript執行環境,與Node不同的是他們向Javascript注入的內容不同,Chrome向Javascript注入window物件,Node注入的是global,這使兩者應用場景完全不同,Chrome 的 Javascript 所有指令都需要通過 Chrome 瀏覽器作為中介實現
Express 簡介
express 是元國輕量級的 Node Web 服務端框架,同樣是一個人氣超高的專案,它可以幫助我們快速搭建基於Node 的 Web應用
專案初始化
建立專案
mkdir admin-imooc-node
cd admin-imooc-node
npm init -y
安裝依賴
npm i -S express
建立app.js (入口檔案執行專案其實就是啟動這個檔案)
// 第一步 引用express
const express = require('express')
// 第二步 建立一個app應用,這個app其實就是express應用
const app = express()
// 第三步 建立一個基於express的監聽
app.get('/',function(req,res) {
res.send('hello node' )
})
// 通過app.listen()來將整個專案執行起來
const server = app.listen(5000,function () {
const { address,port } = server.address()
console.log('Http Server is running on http://%&:%&' ,address,port)
})
啟動專案 node app.js
express基本概念
中介軟體
中介軟體是一個函式,在請求和響應週期中被順序呼叫
Middleware functions are functions thiat have access to the requret object (req),the response object(res) and this next function in the application`s request-response cycle
const myLogger = function(req,res,next) {
console.log('myLogger')
next() //沒有呼叫next 後續不要有其他執行步驟 瀏覽器就一直在等待
}
app.use(myLogger) // 使用中介軟體
中介軟體需要在響應結束前被呼叫
路由
應用如何響應請求的一種規則
- 響應 / 路徑的 get 請求:
app.get('/',function(req,res) {
res.send('hello node')
}
- 響應 / 路徑的 post 請求:
app.post('/',function(req,res) {
res.send('hello node')
}
規則主要分為兩部分:
- 請求方法:get、post…
- 請求的路徑:/、/user/可以使用正則表示式
異常處理
通過自定義異常處理中介軟體處理請求中的異常
// 異常處理通過 errorHandler 四個引數一個都不能少 ,他需要後製(捕獲異常)
function errorHandler(err,req,res,next) {
console.log(err)
res.status(500),json({
error:-1,
msg:err.toString()
})
}
app.usr(errorHandler)
專案框架的優化
路由
安裝 boom 依賴
npm i-S boom //最大的好處是幫我們快速的生成一些異常資訊
404處理、
router.use((req,res,next) => {
next(boom.notFound('介面不存在'))
})
router.use((err,req,res,next) => {
const msg = ((err && err.message)) || '系統錯誤'
const statusCode = (err.output && err.output.statusCode) || 500;
const errorMsg = (err.output && err.output.payload && err.output.payload.error) || err.message
res.status(statusCode).json({
code:CODE_ERROR,
msg,
error:statusCode,
errorMsg
})
})
全文
const express = require('express')
const userRouter = require('./user')
const boom = require('boom')
const {
CODE_ERROR
} = require('../utils/constant')
// 註冊路由
const router = express.Router()
router.get('/',function(req,res) {
res.send('歡迎進入寂靜讀書後臺管理')
})
router.use('/user',userRouter)
router.use((req,res,next) => {
next(boom.notFound('介面不存在'))
})
router.use((err,req,res,next) => {
const msg = ((err && err.message)) || '系統錯誤'
const statusCode = (err.output && err.output.statusCode) || 500;
const errorMsg = (err.output && err.output.payload && err.output.payload.error) || err.message
res.status(statusCode).json({
code:CODE_ERROR,
msg,
error:statusCode,
errorMsg
})
})
module.exports = router
//user.js下
const express = require('express')
const router = express.Router()
router.get('/info',function(req,res,next) {
res.json('user info...')
})
module.exports = router