建設(shè)網(wǎng)站需要多少錢近兩年成功的網(wǎng)絡(luò)營(yíng)銷案例
文章目錄
- 安裝配置koa2
- 配置nodemon,熱更新我們的項(xiàng)目
- 中間件
- 什么是中間件
- 👻洋蔥模型
- 路由中間件
- 連接數(shù)據(jù)庫(kù) - mysql
- 后端允許跨域
- 處理請(qǐng)求
- get
- post
- put
- delete
- 后續(xù)會(huì)繼續(xù)更新

安裝配置koa2
👻安裝 koa2
npm i koa2 -s
👻在package.json 配置,當(dāng)然是在npm init的基礎(chǔ)之上
"scripts": {"start": "node index.js"...},
👻這樣就可以 借用 npm run start 來啟動(dòng)
配置nodemon,熱更新我們的項(xiàng)目
nodemon詳解
npm i nodemon -s
👻在package.json中配置 scripts/start 改為
"scripts": {"start": "nodemon index.js"...},
中間件
什么是中間件
中間件的本質(zhì)為一個(gè)回調(diào)函數(shù),參數(shù)包含請(qǐng)求對(duì)象、響應(yīng)對(duì)象和執(zhí)行下一個(gè)中間件的函數(shù)
koa中間件采用的是洋蔥模型、每次執(zhí)行下一個(gè)中間件傳入兩個(gè)參數(shù)
ctx: 封裝了request和response 的變量
next: 進(jìn)入下一個(gè)要執(zhí)行的中間件函數(shù)
👻洋蔥模型
👻下面的示例代碼可以說明這種情況
app.use(async (ctx,next) => {console.log(1)await next()console.log(1)
})
app.use(async (ctx,next) => {console.log(2)await next()console.log(2)
})
app.use(async (ctx,next) => {console.log(3)await next()console.log(3)
})
👻結(jié)果如下
路由中間件
npm i koa-router -s
👻我們直接給koa-router -s 做遷移(單獨(dú)的文件夾存放),并對(duì)該模塊進(jìn)行切片
新建 Router/index.js
const Router = require('koa-router')
const router = new Router()
const user = require('./user')
router.use('/user',user.routes(),user.allowedMethods())
// 重定向
router.redirect('/','/user')
module.exports = router
👻新建 Router/user.js
const Router = require("koa-router")
const user = new Router()
user.get('/add',(ctx)=>{ctx.body = "添加用戶"
})module.exports = user
👻原本的入口文件 index.js
const koa = require('koa2')
const router = require('./Router')
const { port } = require('./setting')
// 聲明一個(gè)實(shí)例
const app = new koa()/*** router.routers()作用是啟動(dòng)路由* router.allowedMethods()允許所有請(qǐng)求方法111*/
app.use(router.routes(),router.allowedMethods())
app.listen(port, () => {console.log("localhost:"+`${port}`)
})
👻以上就完成了路由模塊的基本內(nèi)容
連接數(shù)據(jù)庫(kù) - mysql
👻首先準(zhǔn)備好數(shù)據(jù)庫(kù)
👻新建連接數(shù)據(jù)庫(kù)的代碼
const mysql = require('mysql')const connection = mysql.createConnection({host : 'localhost',user : 'root',password : 'xxx',database : 'property'
});connection.connect()connection.query('select * from user',function(err,results,fileds){if(err)throw errconsole.log(results)
})
connection.end()
👻在這里mysql的版本過新的話會(huì)出現(xiàn)
Client does not support authentication protocol requested by server; consider upgrading MySQL cli
這是由于mysql版本過高,8版本的用戶密碼加密規(guī)則與以往的不同,可以參考下面的進(jìn)行更改,加密規(guī)則
解決辦法
👻我們可以選擇連接池進(jìn)行連接,并進(jìn)行封裝
const mysql = require('mysql')
// 連接池
const pool = mysql.createPool({connectionLimit: 10,host: 'localhost',user: 'root',password: 'root',database: 'property'
});/*** 查詢操作數(shù)據(jù)庫(kù)函數(shù)* @param sql sql語(yǔ)句* @param callback 回調(diào)函數(shù)*/
function query(sql, callback) {pool.getConnection((err, connection) => {if (err) throw errconnection.query(sql, (err, rows) => {callback(err, rows)connection.release()})})
}module.exports = query
const db = require('../utils/db')
db('select * from user',(err,rows)=>{if(err)throw errconsole.log(rows)
})
👻詳細(xì)內(nèi)容
mysql包官方文檔
后端允許跨域
npm i koa2-cors
👻這個(gè)中間件一定要寫在路由之前
app.use(cors());
app.use(router.routers(),router.allowMethods());
處理請(qǐng)求
我們暫時(shí)都是靠postman模擬發(fā)送請(qǐng)求
get
post
處理post請(qǐng)求,需要借助koa-body中間件,koa-body支持解析json,也支持文件解析
在這里安裝一下
npm i koa-body
index.js 入口文件
const {koaBody} = require('koa-body')
app.use(koaBody());