'use strict'; /** * 指标库控制器 * * @author Mai * @data 2018/4/19 * @version */ const fs = require('fs'); const path = require('path'); const awaitWriteStream = require('await-stream-ready').write; const sendToWormhole = require('stream-wormhole'); const libConst = require('../const/lib'); module.exports = app => { class LibController extends app.BaseController { /** * 指标库页面 * * @param {object} ctx - egg全局context * @return {void} */ async index (ctx) { let status = ctx.query.status; const libList = await ctx.service.quotaLib.getList(status); //获取指标源状态数量 const libStatus = await ctx.service.quotaLib.getStatusNum(); const renderData = { status, libList, libConst, libStatus }; await this.layout('lib/index.ejs', renderData, 'lib/modal.ejs'); } /** * 上传指标源 * * @param {object} ctx - egg全局context * @return {void} */ async upload(ctx) { const parts = ctx.multipart({ autoFields: true }); let addData = {}; let stream; while ((stream = await parts()) != null) { const filename = stream.filename.toLowerCase(); if(filename === ''){ throw '请上传文件'; } const fileInfo = path.parse(filename); let create_time = Date.parse( new Date())/1000; let filepath = libConst.quotaLibDir + create_time + fileInfo.ext; addData = { name: fileInfo.name, path: filepath, create_time: create_time }; const target = path.join(filepath); const writeStream = fs.createWriteStream(target); try { await awaitWriteStream(stream.pipe(writeStream)); } catch (err) { await sendToWormhole(stream); throw err; } } if(addData !== {}){ try { //插入数据到数据库 const result = await ctx.service.quotaLib.add(addData); if (!result) { throw '新增指标源数据失败'; } ctx.redirect('/lib'); } catch (err) { throw err; } }else{ throw '请上传文件'; } } } return LibController; }