1、npm init
2、安装koa npm install -S koa koa-bodyparser koa-logger koa-router
3、安装mysql (因为之前学习过mysql,所以这里选择mysql)
有了服务、有了数据库,我们还缺少啥呢? 哦哦哦对,还缺少请求,so 安装request
4、安装request npm install -S request
下面我们直接看下代码: 'use strict'
const Koa = require('koa') const app = new Koa() const bodyParser = require('koa-bodyparser') const logger = require('koa-logger')
/** 整体请求方式配置基本信息 / app.use(async (ctx, next) => { ctx.set('Access-Control-Allow-Origin', '') ctx.set('Content-Type', 'application/json') await next() })
/** 引入api接口 */ const get = require('./api/get') const post = require('./api/post')
/** get请求 */ app.use(get.routes(), get.allowedMethods())
/** post请求需要加上 bodyParser */ app.use(bodyParser()).use(gzl.routes(), gzl.allowedMethods()) app.use(bodyParser()).use(post.routes(), post.allowedMethods())
/**
- 请求日志
- methods、url、status、ms */ app.use(logger())
/** 项目启动端口 */ const host = 'http://127.0.0.1', port = 3706
/** 启动服务、监听端口 */
app.listen(port, () => {
console.log(app started at port ${ host }:${ port })
})
我们请求的方式一般常用的就是post和get,这里我们简单的写下,前端的请求过来,我们做下处理
首先是post 请求 'use strict'
const router = require('koa-router')()
/** 路由模块配置 (前缀) */ router.prefix('/postApi')
router.post('/', async (ctx, next) => { await next() ctx.body = { code: 1, postParams: ctx.request.body } })
module.exports = router
我们接到请求,该给浏览器返回一些数据啊,又不能随意给数据,那么只能去数据库里给人家找找了,连接数据库,它来了,它来了。。。
创建config/mysql.js
'use strict' module.exports = { user: 'root', password: '123456', database: 'test', host: 'localhost', port: 3306 }
连接数据库 创建common/connect.js
'use strict'
const mysql = require('mysql') const { user, password, database, host, port } = require('../config/mysql')
let pool = mysql.createPool({ user, password, database, host, port })
/** 链接数据库操作 / let query = (sql, values) => { return new Promise((resolve, reject) => { pool.getConnection(function (err, connection) { if (err) { reject(err) } else { connection.query(sql, values, (err, fields) => { if (err) reject(err) else resolve(fields) /* 释放链接 */ connection.release() }) } }) }) }
module.exports = { query }
写了这么多,到底能不能用,我们来试下,
调用 以修改 api/post.js 为例:
'use strict'
const router = require('koa-router')() const { query } = require('.../common/connect')
/** 路由模块配置 (前缀) */ router.prefix('/getApi')
/** 数据库操作 */ const getUser = () => { return query('select * from user', []) }
router.post('/', async (ctx, next) => { await getUser().then(res => { next() ctx.body = { code: 1, data: res } }) })
module.exports = router
第三方请求
创建config/request.js 'use strict'
const request = require('request')
/** url参数转换 */ const obj2String = (obj, arr = [], idx = 0) => { for (let item in obj) { arr[idx++] = [item, obj[item]] } return new URLSearchParams(arr).toString() }
/** 第三方接口 调用 / const requestApi = (method = 'get', url, params = null) => { return new Promise((resolve, reject) => { if (method === 'get') { if (params) { url += '?' + obj2String(params) } request.get(url, function (error, response, body) { if (!error && response.statusCode == 200) { resolve(body) } else { reject(error) } }) } else { const option = { url: url, method: 'post', json: true, headers: { 'Access-Control-Allow-Origin': '', 'content-type': 'application/json' }, body: params } request(option, function (error, response, body) { if (!error && response.statusCode == 200) { resolve(body) } else { reject(error) } }) } }) }
module.exports = requestApi
开始调用 'use strict'
const requestApi = require('./methods/http')
requestApi('get', 'pv.sohu.com/cityjson', { ie: 'utf-8' }).then(res => console.log(res))
有了koa创建的服务,我们开始启动它
新建服务启动命令: 在 package.json 中的 scripts 对象添加 "start": "node index.js"
我们在服务挂掉了 又不想手动去重启,总不能每天都盯着服务吧,开玩笑,还有大量的需求要开发呢
使用 pm2 管理进程 (pm2是一个node应用的监控管理工具)
主要的一些作用: 1、以守护进程的方式将我们的node应用运行在后台 2、提供简便的方式启动或停止node应用 3、监控node应用的运行状态,并提供当node应用崩溃时自动重启的功能 4、开启cluster模式后,会采用负载均衡的策略将node应用跑在多个cpu上,从而充分发挥多核cpu的性能 5、配合ecosystem.config.js,可以方便地进行一键部署
全局安装pm2 我们来修改下启动脚本
"start": "pm2 start index.js --watch", // 启动程序 + 监听 "reload": "pm2 reload all", // 重启进程 "stop": "pm2 stop all", // 停止进程 "delete": "pm2 delete all" // 删除进程