基于koa+mysql实现用户的增删改查
初始化配置
- 安装脚手架工具: npm install -g koa-generator
- 新建项目目录:koa2 -e demo(demo为自定义名称)
- 进入项目: cd demo
- 初始化依赖:npm install
- 启动项目:npm start
- 安装sequelize依赖和mysql连接驱动: npm install sequelize mysql2 -S
构建项目目录
bin: 该目录下的www文件为项目的入口,npm start 执行的node指令为 node bin/www,通过它引入app.js配置内容
config:数据库配置文件
node_modules:和前端一样,里面是项目需要的依赖模块
public:公共文件夹,放一些样式、页面js逻辑、图片
routes:路由文件,分发请求
src-controller: 数据操作
src-db: 数据库配置文件及连接
views:视图文件
app.js:配置文件
package.json:包管理文件
连接数据库
config-dbconfig.js 数据库基础配置
//config-dbconfig.js
//数据库的配置文件
const config = {
database: 'test1',
username: 'root',
password: '12345678',
host: 'localhost',
port: 3306,
db: 'mysql'
}
module.exports = config
src-db-seq.js 创建数据库连接
//src-db-seq.js
//连接数据库
const Sequelize = require('sequelize')
const config = require('../../config/dbconfig')
const conf = {
host: config.host,
dialect: config.db,
}
const sequelize = new Sequelize(config.database,config.username,config.password,conf)
sequelize.authenticate().then(() => {
console.log("连接数据库成功~");
}).catch(err => {
console.log("连接数据库失败~", err);
});
module.exports = sequelize
src-db-model-user.js 创建数据模型,将数据库中的数据表映射成一个class类
//
//用户数据模型
const {Sequelize, DataTypes, Model} = require('sequelize')
const sequelize = require('../seq')
class User extends Model {};
//创建数据模型
User.init({
id:{
type:DataTypes.INTEGER, //varchar(255)
allowNull:false, //不为空
primaryKey:true, //主键
},
username:{
type: DataTypes.STRING,
},
userpass:{
type: DataTypes.STRING,
},
},
{
tableName: 'user', //数据表
createdAt: false,
updatedAt: false,
sequelize //数据库连接
}
)
module.exports = {
User
}
scr-db-mysql.js 数据库的增删改查操作
//scr-db-mysql.js
//数据库的增删改查
const {User} = require('./model/user')
async function selectQuery(username,password){
const isUser = await User.findOne({
where:{
username:username,
userpass:password
}
})
return isUser
}
module.exports = {
selectQuery
}
整理,分发请求
src-controller-demo-index.js 处理请求
//src-controller-demo-index.js
//登录
const selectQuery = require('../../db/mysql')
async function login(ctx, next){
const { username, userpass } = ctx.request.body
try{
const sel = await selectQuery.selectQuery(username, userpass)
console.log('selsel', sel)
if (sel === null) throw '用户名或密码错误' //抛出异常
ctx.body = {
code: 200,
msg: 'login success',
data: {
username,
userpass
}
}
}catch(error){
ctx.body = {
code: 401,
msg: error
}
}
}
module.exports = {
demoGet
}
src-controller-controller.js 请求处理的控制器 不同类型的请求处理,放在不同的文件夹下方便处理
//src-controller-controller.js
module.exports={
Demo:require('./demo/index')
}
routes-index.js 接受所有请求,并将请求发给控制器,控制器再分发给对应的模块进行处理
const router = require('koa-router')()
const controller = require('../src/controller/controller')
router.post('/login', controller.Demo.login)
module.exports = router
至此登录接口的开发完成,采用postman进行测试
登录成功
登录失败