node+koa2+knex搭建node-cli(附源碼)

按照流程一步一步操做就能夠了

源碼地址git地址github.com/lyfpf/noedj…

若是沒有聽過或沒用knex的小夥伴不要緊,不要緊。html

knex是一個操做mysql的插件,用起來很是簡單node

knexjs.org/(官網文檔)mysql

www.songxingguo.com/2018/06/30/…(中文文檔) git

開發環境:github

  • node 8.11.0及以上
  • npm 5.6.0及以上
  • mysql 5.7.21
  • mysql圖形界面軟件:navicat

好了,咱們正式開始搭建node環境,首先安裝相關依賴

初始化項目

npm init -y
複製代碼

安裝koa2

npm install koa --save
複製代碼

安裝koa-routersql

npm install koa --save
複製代碼

安裝koa-bodyparser(用於解析請求體)數據庫

npm install koa-bodyparser --save
複製代碼

安裝nodemon(讓項目能夠熱加載,每次修改代碼不用須要重啓)npm

npm install nodemon --save
複製代碼

安裝lodashjson

npm install lodash --save
複製代碼

安裝mysqlapi

npm install mysql --save
複製代碼

安裝knex

npm install knex --save
複製代碼

這是時候依賴安裝好了

下一步:新建一個js文件,app.js


代碼以下:

const Koa = require('koa')const bodyparser = require('koa-bodyparser')const response = require('./response.js')const app = new Koa()
// 使用響應處理中間件app.use(response)
// 解析請求體app.use(bodyparser())
const router = require('./routes')app.use(router.routes())
// 啓動程序,監聽端口app.listen(8888, () => {  console.log('服務器啓動成功')})複製代碼

下一步:新建一個js文件,response.js


代碼以下:

module.exports = async (ctx, next) => {  try {      // 調用下一個 middleware      await next()
      // 處理響應結果      // 若是直接寫入在 body 中,則不做處理      // 若是寫在 ctx.body 爲空,則使用 state 做爲響應      ctx.body = ctx.body ? ctx.body : {          code: ctx.state.code !== undefined ? ctx.state.code : 0,          data: ctx.state.data !== undefined ? ctx.state.data : {}      }  } catch (e) {      // catch 住全局的錯誤信息      // 設置狀態碼爲 200 - 服務端錯誤      ctx.status = 200
      // 輸出詳細的錯誤信息      ctx.body = {          code: -1,          error: e && e.message ? e.message : e.toString()      }  }}
複製代碼

下一步:新建一個js文件,routes.js(到時候方便些接口用的)


代碼以下:

const router = require('koa-router')({  prefix: '/api'})
module.exports = router複製代碼


這時候環境基本搭建好,可是還沒作好

運行 node app.js

複製代碼

服務器啓動成功了,可是還沒好

還有要啓動熱更新,因此在package.json文件下添加代碼


代碼以下:

"start": "nodemon app.js"複製代碼

這時候直接輸入 npm run start 就能夠啓動服務了


服務器啓動成功了,並且有熱更新

接下來就寫接口吧

新建一個文件夾controllers,在文件內新建index.js文件(這個文件用於寫接口的邏輯代碼)


index.js代碼以下:

const _ = require('lodash')const fs = require('fs')const path = require('path')
/** * 映射 d 文件夾下的文件爲模塊 */const mapDir = d => {    const tree = {}
    // 得到當前文件夾下的全部的文件夾和文件    const [dirs, files] = _(fs.readdirSync(d)).partition(p => fs.statSync(path.join(d, p)).isDirectory())
    // 映射文件夾    dirs.forEach(dir => {        tree[dir] = mapDir(path.join(d, dir))    })
    // 映射文件    files.forEach(file => {        if (path.extname(file) === '.js') {            tree[path.basename(file, '.js')] = require(path.join(d, file))        }    })
    return tree}
// 默認導出當前文件夾下的映射module.exports = mapDir(path.join(__dirname))複製代碼

下一步在routes.js引入該文件,就能夠開始定義接口了


在controllers文件夾下新建接口文件便可

(這裏本身開了一個‘’/html‘’接口)


html.js代碼以下:

module.exports = async (ctx) => {    const html = 'hello world'
  ctx.state.data = {    html  }}複製代碼

到這裏node環境就搭建好了,不過還沒連接mysql


重啓一下。如今就能夠訪問了。127.0.0.1:8888/api/html



接下來就鏈接mysql

新建一個js文件,mysql.js


代碼以下:

var mysql = require('knex')({  client: 'mysql',  connection: {    host : '127.0.0.1', // IP地址    user : 'root', // 數據庫用戶名    password : '123456', // 數據庫密碼    database : 'cauth' // 鏈接到的數據庫的名字  }});
module.exports = { mysql }複製代碼

到這裏環境就搭建好了,能夠操做mysql

接口文件html.js的代碼

const {mysql} = require('../mysql')
module.exports = async (ctx) => {    const top = await mysql('books').limit(3)
  ctx.state.data = {    top  }}複製代碼

保存後,訪問127.0.0.1:8888/api/html,就能夠看到mysql的數據了


若是小夥伴搭建過程當中遇到什麼問題可加微信:473838071,。你們討論
若是有什麼問題,但願各位大佬斧正!

後面還出寫一篇如何把項目部署到阿里雲服務器

相關文章
相關標籤/搜索