使うもの
1)sheet.js
エクセルファイルの書き換え等ができる。
今回はオブジェクトをエクセルファイルに変換するのに使用した。
https://www.npmjs.com/package/xlsx
インストール:
npm install --save xlsx
2)moment.js
時間を扱うのに便利そうだったため。
https://www.npmjs.com/package/moment
インストール:
npm install --save moment
実装
main.js
constexpress=require('express')constapp=express()constmodel=require('モデルのパス')constPREFS=require('定数ファイル').PREFSconstxlsx=require('xlsx')constmoment=require('moment')app.get('/get_excel',async(req,res)=>{try{constselectData=['user_id','user_name','user_pref']constuserSearch=awaituser.getUsers(selectData)if(userSearch){varnewData=userSearch.map(function(record){record.ID=record.user_idrecord.ユーザー名=record.user_name//都道府県をINTで管理していると仮定して。record.都道府県=PREFS[record.user_pref]//数字は返しても仕方ないので消す。deleterecord.user_prefreturnrecord})//エクセルファイルを作成varnewWB=xlsx.utils.book_new()//エクセルシートを作成varnewWS=xlsx.utils.json_to_sheet(newData)//日付をつけた方が資料の管理がしやすそうなので、不要であればいらないです。constcreateTime=moment(Date.now()).format('YYYYMMDD')//ファイル名もといパスを指定constfileName='エクセルファイルの保存先のパス'+createTime+'_ユーザー情報.xlsx'//エクセルファイルにするxlsx.utils.book_append_sheet(newWB,newWS,'ユーザー情報')xlsx.writeFile(newWB,fileName)//エクセルのパスを返すreturnres.status(200).download(fileName)}else{returnres.status(500).json({message:'エラー発生!'})}}catch(err){returnres.status(500).json({message:'エラー発生!'})}})
モデル
model.js
constmysql=require('mysql2')constmodels={}//データベースの設定constconnection=mysql.createConnection({host:ホスト,user:ユーザー,password:パスワード,database:データベース名,port:ポート番号,multipleStatements:true//複数のコールを有効化})//モデルmodel.getUsers=(selectData)=>{returnnewPromise((resolve,reject)=>{connection.query('SELECT ?? FROM user',[selectData],(err,results)=>{if(err)returnreject(err)elsereturnresolve(results)})})}module.exports.model=model