安装
npm install koa-generator -g
复制代码
新建koa2-test项目
Koa2 koa2-test
复制代码
进入koa2-test项目里,再执行install
npm install
复制代码
安装cross-env
npm install cross-env --save-dev
复制代码
修改package.json
"dev": "cross-env NODE_ENV=dev ./node_modules/.bin/nodemon bin/www",
"prd": "cross-env NODE_ENV=production pm2 start bin/www",
复制代码
运行npm run dev
路由
routes 目录是路由目录,新建一个login.js文件
仿照users.js写入内容const router = require('koa-router')()
router.prefix('/login')
router.get('/', function (ctx, next) {
ctx.body = 'this is a login response!'
})
router.get('/next', function (ctx, next) {
ctx.body = 'this is a login/next response'
})
module.exports = router
复制代码
在app.js中引入
const login = require('./routes/login')
复制代码
app.use(login.routes(), login.allowedMethods())
复制代码
此时bin/www.js里的端口号默认是3000,则在浏览器访问http://localhost:3000/login
登录
安装
npm i koa-generic-session koa-redis redis --save
复制代码
使用 在app.js中,要写在路由之前,如果计算机本地没有安装redis,则要安装
const session = require('koa-generic-session')
const redisStore = require('koa-redis')
----------------------------------------------
app.keys = ['hello123456*']
app.use(session({
cookie: {
path: '/',
httpOnly: true,
maxAge: 24 * 60 * 60 * 1000
},
store: redisStore({
all: '127.0.0.1:6379'
})
}))
复制代码
测试session,在login.js中
router.get('/session-test', async function(ctx, next){
if(ctx.session.viewCount == null){
ctx.session.viewCount = 0
}
ctx.session.viewCount++
ctx.body = {
errno: 0,
viewCount: ctx.session.viewCount
}
})
复制代码
打开
http://localhost:3000/login/session-test
复制代码
显示,刷新一次加一,换个浏览器session就重置了
session成功了接口
安装
npm i mysql xss --save
复制代码
接口的返回数据模型
class BaseModel{
constructor(data,message){
if(typeof data === 'string'){
this.message = data
data = null
message = null
}
if(data){
this.data = data
}
if(message){
this.message = message
}
}
}
class SuccessModel extends BaseModel{
constructor(data,message){
super(data,message)
this.errno = 0
}
}
class ErrorModel extends BaseModel{
constructor(data,message){
super(data,message)
this.errno = -1
}
}
module.exports = {
SuccessModel,
ErrorModel
}
复制代码
连接数据库的基本配置,新建一个conf文件夹,conf文件夹里新建db.js, 本地计算机要安装mysql数据库,我是使用可视化工具操作mysql数据库(mysql官方推荐的)
const env = process.env.NODE_ENV //环境变量
// 配置
let MYSQL_CONF
let REDIS_CONF
if(env === 'dev'){
// mysql
MYSQL_CONF = {
host: 'localhost',
port: '3306', //默认端口号
user: 'root',
password: '123456', //密码
database: 'myblog' //你的数据库名字
}
// redis
REDIS_CONF ={
port: '6379', //默认端口号
host: '127.0.0.1'
}
}
// 由于都是在本地,没有上线,所以 env 没有起到作用,做个提示
if(env === 'production'){
// mysql
MYSQL_CONF = {
host: 'localhost',
port: '3306',
user: 'root',
password: '123456',
database: 'myblog'
}
// redis
REDIS_CONF ={
port: '6379',
host: '127.0.0.1'
}
}
module.exports = {
MYSQL_CONF,
REDIS_CONF
}
复制代码
修改app.js 中的redis配置 引入
const { REDIS_CONF } = require('./conf/db')
复制代码
修改
store: redisStore({
all: `${REDIS_CONF.host}:${REDIS_CONF.port}`
})
复制代码
新建一个db文件夹,db文件夹里新建mysql.js,用来封装mysql查询,返回一个promise
const mysql = require('mysql')
const {MYSQL_CONF} = require('../conf/db')
// 创建连接对象
const con = mysql.createConnection(MYSQL_CONF)
// 连接
con.connect();
// 创建同意执行sql语句的函数
function exec(sql){
const promise = new Promise((resolve,reject) => {
con.query(sql,(err,result)=>{
if(err){
reject(err)
return
}
resolve(result)
})
})
return promise
}
module.exports = {
exec,
escape: mysql.escape
}
复制代码
新建controller文件夹,里面新建user.js
const {
exec, escape} = require('../db/mysql')
const login = async (username, password)=>{
username = escape(username)
password = escape(password)
const sql = `select username, realname from users where username=${username} and password = ${password}`
const rows = await exec(sql)
return rows[0] || {}
}
module.exports = {
login
}
复制代码
在数据库里添加
添加的sql语句insert into users(username,`password`,realname) values('wangwu','123','王五')
复制代码
使用postman查询
成功总体流程为:routes/login.js 写路由文件 ---》controller/user.js做mysql查询语句操作 ---》db/mysql.js连接数据库操作---》conf/db.js是数据库的基本配置