#使うもの
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
const express = require('express')
const app = express()
const model = require('モデルのパス')
const PREFS = require('定数ファイル').PREFS
const xlsx = require('xlsx')
const moment = require('moment')
app.get('/get_excel', async(req, res) => {
try {
const selectData = ['user_id', 'user_name', 'user_pref']
const userSearch = await user.getUsers(selectData)
if (userSearch) {
var newData = userSearch.map(function(record) {
record.ID = record.user_id
record.ユーザー名 = record.user_name
//都道府県をINTで管理していると仮定して。
record.都道府県 = PREFS[record.user_pref]
//数字は返しても仕方ないので消す。
delete record.user_pref
return record
})
//エクセルファイルを作成
var newWB = xlsx.utils.book_new()
//エクセルシートを作成
var newWS = xlsx.utils.json_to_sheet(newData)
//日付をつけた方が資料の管理がしやすそうなので、不要であればいらないです。
const createTime = moment(Date.now()).format('YYYYMMDD')
//ファイル名もといパスを指定
const fileName = 'エクセルファイルの保存先のパス' + createTime + '_ユーザー情報.xlsx'
//エクセルファイルにする
xlsx.utils.book_append_sheet(newWB, newWS, 'ユーザー情報')
xlsx.writeFile(newWB, fileName)
//エクセルのパスを返す
return res.status(200).download(fileName)
} else {
return res.status(500).json({ message: 'エラー発生!' })
}
} catch (err) {
return res.status(500).json({ message: 'エラー発生!' })
}
})
モデル
model.js
const mysql = require('mysql2')
const models = {}
//データベースの設定
const connection = mysql.createConnection({
host: ホスト,
user: ユーザー,
password: パスワード,
database: データベース名,
port: ポート番号,
multipleStatements: true //複数のコールを有効化
})
//モデル
model.getUsers = (selectData) => {
return new Promise((resolve, reject) => {
connection.query('SELECT ?? FROM user', [selectData], (err, results) => {
if (err) return reject(err)
else return resolve(results)
})
})
}
module.exports.model = model