1. 程式人生 > 其它 >服務端框架搭建及優化

服務端框架搭建及優化

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