Controller
//引入egg的controller
const Controller = require('egg').Controller
// 引入fs模块
const fs = require('fs')
// 引入path模块
const path = require('path')
// 安装并引入 mz_modules/pump 用来将文件存储在本地
const pump = require('mz-modules/pump')
mz_modules/pump安装命令
cnpm /npm install mz-modules --save
yarn add mz-modules --save
完成controller
class ArticleController extends Controller {
async publish() {
const { ctx } = this
// 解析获取到的表单数据 将会得到一个函数part
const part = ctx.multipart({autoFields: true})
// 通过调用part函数得到附件
let stream = await part()
// 取出表单数据中的其他数据
let params = part.field;
if(stream) {
// 为了保证文件名称不会重复 这里自定义一个文件名称
// path.extname(stream.filename) 用来获取文件的扩展名
let filename = (new Date().getTime() + Math.random().toString(36).substr(2) + path.extname(stream.filename).toLocaleLowerCase())
// 把文件存储在本地可以使用文件模块的写流方法
// 首先确认文件的写入地址
let target = 'app/public/imgs/' + filename;
params.img = '/public/imgs/' + filename; // 记录当前附件的地址
let writeStream = fs.createWriteStream()
await pump(stream, writeStream)
}
// 调用服务将准备号的参数数据传递给service
const result = await ctx.service.articles.publish(params)
ctx.body = result
}
}
module.exports = ArticleController
文章发布service
const Service = require('egg').Service
class ArticleService extends Service {
// 接受服务调用时传入的参数
async publish(params) {
const { app } = this
try {
let data = app.mysql.insert('articles', params)
const result = {
code: 1,
msg: 'success'
}
return result
} catch(err) {
console.log(err)
retrun err // 如果return 则前台可以看到错误信息
}
}
}
router
module.exports = app => {
const { router, controller } = app;
//文章上传接口
router.post('/articles/publish', controller.articles.publish)
};