Open gaowei1012 opened 4 years ago
// app.js
const Koa = require('koa')
const cors = require('koa-cors');
const logger = require('koa-logger')
const bodyParser = require('koa-bodyparser');
const session = require('koa-session-minimal')
const MysqlStore = require('koa-mysql-session')
const { port, host, database } = require('./config')
// mysql session
const sessionMysqlConfig = {
user: database.USERNAME,
password: database.PASSWORD,
database: database.DATABASE,
host: database.HOST
}
const app = new Koa()
// middlwares
app
.use(session({ key: 'USER_SID', store: new MysqlStore(sessionMysqlConfig) }))
.use(bodyParser({
enableTypes: ['json', 'form', 'text'],
extendTypes: {
text: ['text/xml', 'application/xml']
}
}))
.use(logger())
// 处理跨域
app.use(cors());
// router
app
.use(require('./router/orders').routes())
.use(require('./router/exportExcle').routes())
.use(require('./router/pay').routes())
.use(require('./router/upload').routes())
app.listen(port, () => {
console.log(`http://${host}:${port}`)
})
// utils 工具文件
// router.js
// 上传文件 路由
const router = require('koa-router')()
const constroller = require('../controller/upload')
router.post('/api/upload/fileUpload', constroller.addUploadImg)
module.exports = router
//
// controller
// upload.js
const OSS = require('ali-oss')
const xss = require('xss')
const path = require('path')
const { oss } = require('../config/index')
const UplaodFile = require('../db/mysql')
let client = new OSS({
region: oss.region, // 阿里云对象存储域名
accessKeyId: oss.accessKeyId, // api 接口id
accessKeySecret: oss.accessKeySecret, // api 接口密码
bucket: oss.bucket, // bucket 名称
})
// 长传图片
exports.addUploadImg = async (ctx, next) => {
let { title, type, detail } = ctx.request.body
let files = ctx.request.files
let img = []
files.forEach((elm, index) => {
img.push({
name: elm.originalname,
url: oss.url + elem.originalname // 1.使用图片上传阿里云,前提是你开通了阿里云对象存储,也创建了bucket(适合开通服务器,并且开通阿里云对象存储的人群)
// url: 'http://123.56.119.218/server/public/images/' + elem.originalname // 2.图片上传nginx服务器(用nginx服务器存放静态资源,适合开通服务器,没有开通阿里云对象存储的人群)
// url: 'http://localhost:3000/images/' + elem.originalname // 3.本地开发,图片上传到本地server/public目录中的images文件夹(适合本地启动,即没有开通任何阿里云服务产品)
})
})
// 上面三种情况,仅第1种上传阿里云时,需要执行下面的img.froeach循环,其他两种情况下注释即可
img.forEach(async (elem, index) => {
await client.put('images/' + elem.name, path.join(__dirname, '../public/images/') + elem.name)
})
// 防 xss 攻击
title = xss(title)
detail = xss(detail)
let create_at = new Date()
let url = ''
if ((title && detail && type) !== null) {
await UplaodFile.insertFile([detail, title, type, url, create_at])
.then(ret => {
ctx.body = {
code: 1,
message: '保存成功',
data: ret
}
})
.catch(err => {
ctx.body = {
code: -2,
message: '保存失败',
data: err
}
})
} else {
ctx.body = {
code: -2,
message: '字段非法'
}
}
}
// db
// init.js
const orders = `
create table if not exists orders(
id INT NOT NULL AUTO_INCREMENT,
username VARCHAR(100) NOT NULL COMMENT '用户名',
phone VARCHAR(100) NOT NULL COMMENT '用户手机号',
age VARCHAR(50) NOT NULL COMMENT '用户年龄',
sex VARCHAR(50) NOT NULL COMMENT '用户性别',
measure VARCHAR(50) NOT NULL COMMENT '用户尺码',
address VARCHAR(50) NOT NULL COMMENT '用户地址',
people VARCHAR(50) NOT NULL COMMENT '注册人数',
order_status VARCHAR(50) NOT NULL COMMENT '订单状态',
create_at VARCHAR(100) NOT NULL COMMENT '用户创建时间',
PRIMARY KEY(id)
) character set = utf8;
`
module.exports = {
orders
}
//mysql.js
const mysql = require('mysql')
const { database } = require('../config')
const { orders } = require('./init')
const pool = mysql.createPool({
host: database.HOST,
user: database.USERNAME,
password: database.PASSWORD,
database: database.DATABASE,
port: database.PORT
})
// 创建数据库连接
const query = (sql, values) => {
return new Promise((resolve, reject) => {
pool.getConnection((err, connection) => {
if (err) {
reject(err)
} else {
connection.query(sql, values, (err, rows) => {
if (err) {
reject(err)
} else {
resolve(rows)
}
connection.release()
})
}
})
})
}
// 创建表
const createTable = (sql) => {
return query(sql, [])
}
createTable(orders)
// 操作数据
exports.insertOrder = (val) => {
const _sql = 'insert into orders set username=?, phone=?, age=?, sex=?, measure=?, address=?, people=?, order_status=?, create_at=?';
return query(_sql, val)
}
koa项目工程化,搭建属于自己的开发利器!
. ├── app.js ├── config │ └── index.js ├── constant │ └── constant.js ├── controller │ ├── exportExcle.js │ ├── orders.js │ ├── pay.js │ └── upload.js ├── db │ ├── init.js │ └── mysql.js ├── router │ ├── exportExcle.js │ ├── orders.js │ ├── pay.js │ └── upload.js └── utils └── parseXML.js