egg开发文章发布接口(图片上传)(表单数据接口)

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) 
	};

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值