Node.js のスニペット集
このページは、Node.js のスニペットなどをまとめる予定のページです。
目次
注意
- コードのライセンスは CC0 (クレジット表示不要、改変可、商用可) です。
await
がついているコードはasync
関数内で実施してください。((async () => { })()
内など)
スニペット
Buffer
Buffer の結合
const bufferArray = [];
bufferArray.push(Buffer.from('あ'));
bufferArray.push(Buffer.from('い'));
bufferArray.push(Buffer.from('う'));
const buffer = Buffer.concat(bufferArray); // <Buffer e3 81 82 e3 81 84 e3 81 86>
テキストファイル読み込み
// const fs = require('fs').promises;
const data = await fs.readFile('file.txt', 'utf8');
const lines = data.split(/\r?\n/);
// const { promisify } = require('util');
// const fs = require('fs');
const data = await promisify(fs.readFile)('file.txt', 'utf8');
const lines = data.split(/\r?\n/);
テキストファイル書き込み
// const fs = require('fs').promises;
await fs.writeFile('file.txt', 'x');
// const { promisify } = require('util');
// const fs = require('fs');
await promisify(fs.writeFile)('file.txt', 'x');
// const fs = require('fs');
const st = fs.createWriteStream('file.txt');
st.write("test\r\n");
st.close();
CSV 読み込み
// const fs = require('fs').promises;
const data = await fs.readFile('data.csv', 'utf8');
const records = parse(data, { skip_empty_lines: true });
for (const record of records) {
console.log(record);
}
// const _fs = require('fs');
// const parse = require('csv-parse'); // npm install csv-parse
// const iconv = require('iconv-lite'); // npm install iconv-lite
const parser = parse({ skip_empty_lines: true });
const rs = _fs.createReadStream('data.csv');
rs.pipe(iconv.decodeStream('cp932')).pipe(parser);
for await (const record of parser) {
console.log(record);
}
// const _fs = require('fs');
// const parse = require('csv-parse/lib/sync'); // npm install csv-parse
// const iconv = require('iconv-lite'); // npm install iconv-lite
const buffer = await fs.readFile('data.csv');
const data = iconv.decode(buffer, 'cp932');
const records = parse(data, { skip_empty_lines: true });
for (const record of records) {
console.log(record);
}
ファイル名取得
// const path = require('path');
const filename = path.basename('/path/to/file.txt');
ディレクトリ作成 (存在しない場合のみ)
// const _fs = require('fs');
// const fs = require('fs').promises;
const dir = 'path/to/dir';
if (_fs.existsSync(dir)) {
fs.mkdir(dir, { recursive: true });
}
// const { promisify } = require('util');
// const fs = require('fs');
const dir = 'path/to/dir';
if (fs.existsSync(dir)) {
promisify(fs.mkdir)(dir, { recursive: true });
}
fs.exists()
は Deprecated ですがfs.existsSync()
はそうでないためfs.existsSync()
を使用します。
コマンド実行
// const { promisify } = require('util');
// const child_process = require('child_process');
// const exec = promisify(child_process.exec);
const { stdout, stderr } = await exec('echo 1');
console.log(stdout, stderr);
インターネット上の画像ファイルの保存
// const _fs = require('fs');
// const request = require('request');
request('http://example.com/test.png').pipe(_fs.createWriteStream('test.png'));
// const _fs = require('fs');
// const axios = require('axios');
axios({
url: 'http://example.com/test.png',
responseType: 'stream'
}).then((response) => response.data.pipe(_fs.createWriteStream('test.png')));
// const _fs = require('fs');
// const axios = require('axios'); // npm install axios
const response = await axios({
url: 'https://knooto.info/img/logo.png',
responseType: 'stream'
});
response.data.pipe(_fs.createWriteStream('test.png'));
ユーティリティ関数
指定時間待つ
/**
* 指定時間待ちます。
* @param {number} ms ミリ秒
*/
async function sleep(ms){ return new Promise(resolve => setTimeout(resolve, ms)); }
// await sleep(1000);
ファイル・ディレクトリパス一覧取得
/**
* ファイル・ディレクトリのパス一覧を取得します。(例: listFiles('/path/to/dir'), listFiles('/path/to/dir', { recursive: true }))
* @param {string} baseDir 起点になるディレクトリパス
* @param {object} options オプション (recursive: サブディレクトリのファイルも取得するか。デフォルト false)
* @return {Promise<string[]>} ファイル・ディレクトリのパス一覧
*/
async function listFiles(baseDir, options) {
// const { promisify } = require('util');
// const fs = require('fs');
const { recursive = false } = options || {};
let result = [];
let list = await promisify(fs.readdir)(baseDir);
for (let f of list) {
const p = path.join(baseDir, f);
const st = await promisify(fs.stat)(p);
if (st.isDirectory()) {
result.push(p);
if (recursive) {
const subFiles = await listFiles(p, options);
result.push(...subFiles);
}
}
else {
result.push(p);
}
}
return result;
}