blog

アップロード・インターフェースのEgg実装

フロントエンドクライアントは axios, npmiaxios パッケージに依存する必要があります - フロントエンドインターフェースのプロキシのみで、実際のバックエンドインターフェースのリクエスト関...

Sep 17, 2020 · 3 min. read
シェア

フロントエンドクライアント

  • axiosパッケージへの依存が必要,npm i axios --save
  • nodeJsはフロントエンドインターフェースのプロキシしかしません。
/** * フロントエンドのリクエスト関数をラップする */ const upload = async (data) => { const response = await axios .post('/upload', data, { maxContentLength: , params: { api: '/api/upload', }, headers: { 'Content-Type': 'multipart/form-data', }, withCredentials: true, }) .then((res) => res.data) .catch((err) => { showErrorMessage(err); }); // リクエストが成功したかどうかを判定する汎用関数 if (isSuccess(response)) { return response.data; } else { message.error(`アップロード操作の例外: ${response.error_desc}`); return null; } }
const handleOkUpload = async (file) => { const formData = new FormData(); formData.append('file', file); // fileアップロードするファイルデータをストリームする // アップロードajax関数を呼び出す const resData = await upload(formData); if(resData){ // do somesing } }

NodeJs

  • 依存関係request-promiseが必要,npm i request-promise --save

config/config.default.js設定の追加

config.multipart = { mode: 'file', fileSize: '10mb', fileExtensions: ['.xlsx', '.xls'], };

app/controller/upload.js アップロードインターフェース

const { Controller } = require('egg'); const rp = require('request-promise'); const fs = require('fs'); const qs = require('querystring'); /** * アップロード・インターフェイス */ class UploadController extends Controller { async index() { const { ctx, config } = this; // コンフィグファイルから、さまざまな環境のリクエスト・ルート・ドメインとタイムアウト設定を読み込む。 const { noahApiServer, requestTimeout } = config; const { apihost } = noahApiServer; const { request } = ctx; const { body, files, query } = request; const { case_id, tag_id } = body; const { api } = query; const file = files[0]; const { filepath, filename } = file; const url = `${apihost}${api}`; const requestURI = `${url}?${qs.stringify(query)}`; try { ctx.logger.info('インターフェイスをアップロードする:', requestURI); ctx.logger.info('インターフェース本体のパラメーターをアップロードする:', body); const result = await rp({ uri: requestURI, method: 'POST', formData: { case_id, tag_id, file: { value: fs.createReadStream(filepath), options: { filename, contentType: ctx.get('content-type'), }, }, }, json: true, timeout: requestTimeout, }); ctx.body = result; } catch (err) { ctx.logger.info('Excelアップロードに失敗した:', err.message); ctx.body = { cost: 1001, error_desc: `server error: ${err.message}`, result_code: 'FAIL', time: Date.now(), }; } } } module.exports = UploadController;

app/router.jsインターフェイスのマウント

module.exports = (app) => { const { router, controller } = app; router.get('/', controller.home.index); router.post('/upload', controller.upload.index); };
Read next

オブジェクト指向の基本

static 静的メソッドが最初に来て、共有され、一意になります。 .誰が内部か. . 継承とは、「鳥は動物である」「趙珪は人である」といった関係です。 javaでは継承は一方向であり、最終的に変更されたクラスは継承できません。 メソッド名: メソッドの名前。変数名と同じ命名規則で、最初の文字が小さい...

Sep 17, 2020 · 4 min read