按照流程一步一步操作就可以了
源码地址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 }}复制代码