nodejs+koa+mysql搭建后端服務


nodejs+koa+mysql搭建后端服務

 

前言:

    我將會使用nodejs+koa+mysql去自己嘗試學習編寫后端服務,然后根據自己寫的后前端服務區完成一個微信小程序以及配套的后端管理系統,目的是熟悉nodejs以及mysql,同時呢學習一下怎樣的去全方位考慮一個項目的發展以及實現功能等,算是對自己的一個鍛煉!

使用技術:

  1. nodejs
  2. koa
  3. mysql
  4. pm2

一.安裝nodejs

  點擊下載這里呢nodejs安裝就不做過多的贅述了,網上的教程很多,安裝完成以后呢使用 node -v 查看一下自己的版本,我是用的是12.16.3

  還有一點要知道的是npm是隨同nodejs一起安裝的包管理工具,所以不用單獨下載 輸入命令 npm -v 查看版本號

二.安裝koa

  首先我們看一下koa簡介,然后我們開始安裝配置:
  1.npm 安裝koa

npm i koa

  2.在新建目錄下創建app.js添加如下代碼:

  

 1     // 導入koa模塊
 2     const Koa = require('koa');
 3     // 創建koa的實例app
 4     const app = new Koa();
 5 
 6     app.use(async ctx => {
 7         ctx.body = "Hello World"
 8     })
 9     // 監聽端口
10     app.listen(3000, () => {
11         console.log("服務器已啟動,http://localhost:3000");
12     })

   3.啟動項目

    node app 當然了啟動命令根據你的配置來,我的項目啟動命令就是 node bin/www,啟動成功以后就會看到小黑框輸出“服務器啟動成功”。

    我們使用app.listen監聽了3000端口,當然了也可以切換為其他端口進行監聽,大家可以嘗試一下。

  4.Koa中間件

  1. 什么是koa中間件
           koa對網絡請求采用了中間件的形式處理,中間件可以介入請求和相應的處理,是一個輕量級的模塊,每個中間負責完成某個特定的功能。中間件的通過next函數聯系,執行next()后會將控制權交給             下一個中間件,如果沒有中間件沒有執行next后將會沿路折返,將控制權交換給前一個中間件。
           每個中間件都是一個函數(不是函數將報錯),接收兩個參數,第一個是 \color{red}{ctx}上下文對象,另一個是 \color{red}{next}函數
   
 
   2.中間件的使用

    
1 app.use(async (ctx, next) => {
2   const start = new Date()
3   await next()
4   const ms = new Date() - start
5   console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
6 })

  3.中間件有先后順序

  4.app.use()

    koa2中的app.use()只能用於注冊中間件並且必須是生成器函數,反過來說app.use是用來注冊koa2中間件的不再像express中的use用來注冊路由。參考鏈接

5.koa路由配置

  1.安裝koa-router

    npm i koa-router -D

  2.導入koa-router模塊並實例化

1  // 導入koa-router模塊
2     const Router = require('koa-router');
3     // 創建koa-router的實例router
4     const router = new Router();

  3.配置接口

1 router.get('/', ctx => {
2         ctx.body = "哈哈哈"
3     })
4     app.use(router.routes());

  4.koa-router 提供了 .get、.post、.put 和 .del 接口來處理各種請求,但實際業務上,我們大部分只會接觸到 POST 和 GET,所以接下來只針對這兩種請求類型來說明。

    4.1:get:用於接收GET請求

1 router.get('/get', ctx => {
2         ctx.body = "哈哈哈"
3     })
4     app.use(router.routes());

    4.2:post:用於接收POST請求

1  router.post('/', ctx => {
2         ctx.body = "哈哈哈"
3     })
4     app.use(router.routes());

    4.3:all:用於接收GET與POST請求

1 router.all('/', ctx => {
2         ctx.body = "哈哈哈"
3     })
4     app.use(router.routes());

  5.獲取請求參數

    5.1:獲取get請求參數:ctx.query

1 router.get('/get', ctx => {
2           ctx.body = ctx.query
3       })

    5.2:獲取post請求參數:ctx.request.body

1  router.get('/get', ctx => {
2         ctx.body = ctx.request.body
3     })

 6.處理koa請求跨域問題

  下載koa2-cors:npm i --save koa2-cors

  引入模塊:

1 const cors = require('koa-cors')
2 
3 // 處理跨域,放到中間件的最前面
4 app.use(cors());

三.安裝mysql

mysql安裝也將不去做太多的講解,畢竟不專業,也是按照教程來安裝調試的,所以有需求的去自行百度,有問題的可以留言探討!

四.pm2

PM2的主要特性:

  • 內建負載均衡(使用Node cluster 集群模塊)
  • 后台運行
  • 0秒停機重載,我理解大概意思是維護升級的時候不需要停機.
  • 具有Ubuntu和CentOS 的啟動腳本
  • 停止不穩定的進程(避免無限循環)
  • 控制台檢測
  • 提供 HTTP API
  • 遠程控制和實時的接口API ( Nodejs 模塊,允許和PM2進程管理器交互 )

安裝:

npm install -g pm2

用法

$ npm install -g pm2 命令行全局安裝pm2
$ pm2 start app.js 啟動app項目
$ pm2 list 列出由pm2管理的所有進程信息,還會顯示一個進程會被啟動多少次,因為沒處理的異常。

$ pm2 monit 監視每個node進程的CPU和內存的使用情況

$ pm2 logs 顯示所有進程日志
$ pm2 stop all 停止所有進程
$ pm2 restart all 重啟所有進程
$ pm2 reload all 0秒停機重載進程 (用於 NETWORKED 進程)
$ pm2 stop 0 停止指定的進程
$ pm2 restart 0 重啟指定的進程
$ pm2 startup 產生 init 腳本 保持進程活着
$ pm2 web 運行健壯的 computer API endpoint ( http://localhost:9615)
$ pm2 delete 0 殺死指定的進程
$ pm2 delete all 殺死全部進程

 

 

運行進程的不同方式:
$ pm2 start app.js -i max 根據有效CPU數目啟動最大進程數目
$ pm2 start app.js -i 3 啟動3個進程
$ pm2 start app.js -x 用fork模式啟動 app.js 而不是使用 cluster
$ pm2 start app.js -x -- -a 23 用fork模式啟動 app.js 並且傳遞參數 (-a 23)
$ pm2 start app.js --name serverone 啟動一個進程並把它命名為 serverone
$ pm2 stop serverone 停止 serverone 進程
$ pm2 start app.json 啟動進程, 在 app.json里設置選項
$ pm2 start app.js -i max -- -a 23 在--之后給 app.js 傳遞參數
$ pm2 start app.js -i max -e err.log -o out.log 啟動 並 生成一個配置文件

 

五.結束語

本文呢最主要就是記錄一下最基礎的安裝方式以及使用的插件,后續還有接收psot參數,處理文件上傳的模塊,生成驗證token等等,后續會根據實際的應用場景去給大家分享我的筆記!




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM