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

按照流程一步一步操作就可以了

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

如果没有听过或没用knex的小伙伴没关系,没关系。

knex是一个操作mysql的插件,用起来非常简单

knexjs.org/(官网文档)

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

开发环境:

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

好了,我们正式开始搭建node环境,首先安装相关依赖

初始化项目

npm init -y
复制代码

安装koa2

npm install koa --save
复制代码

安装koa-router

npm install koa --save
复制代码

安装koa-bodyparser(用于解析请求体)

npm install koa-bodyparser --save
复制代码

安装nodemon(让项目可以热加载,每次修改代码不用需要重启)

npm install nodemon --save
复制代码

安装lodash

npm install lodash --save
复制代码

安装mysql

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,。大家讨论
如果有什么问题,希望各位大佬斧正!

后面还出写一篇如何把项目部署到阿里云服务器



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值