Node.js のスニペット集

このページは、Node.js のスニペットなどをまとめる予定のページです。

目次

注意

  • コードのライセンスは CC0 (クレジット表示不要、改変可、商用可) です。
  • await がついているコードは async 関数内で実施してください。((async () => { })() 内など)

スニペット

テキストファイル読み込み

// 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;
const data = await fs.readFile('file.txt', 'utf8');
const lines = data.split(/\r?\n/);

テキストファイル書き込み

// const { promisify } = require('util');
// const fs = require('fs');
await promisify(fs.writeFile)('file.txt', 'x');
// const fs = require('fs').promises;
await fs.writeFile('file.txt', 'x');
// const fs = require('fs');
const st = fs.createWriteStream('file.txt');
st.write("test\r\n");
st.close();

ファイル名取得

// const path = require('path');
const filename = path.basename('/path/to/file.txt');

ディレクトリ作成 (存在しない場合のみ)

// 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 _fs = require('fs');
// const fs = require('fs').promises;
const dir = 'path/to/dir';
if (_fs.existsSync(dir)) {
    fs.mkdir(dir, { recursive: true });
}

インターネット上の画像ファイルの保存

request を使用する場合
// const _fs = require('fs');
// const request = require('request');
request('http://example.com/test.png').pipe(_fs.createWriteStream('test.png'));
axios を使用する場合
// 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')));

ユーティリティ関数

指定時間待つ

/**
 * 指定時間待ちます。
 * @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;
}