node.js (koa2)

安装

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是数据库的基本配置

转载于:https://juejin.im/post/5d087607f265da1baf7cedc5

猜你喜欢

转载自blog.csdn.net/weixin_33989058/article/details/93179249