node js安直にローカルのファイルをブラウザに見せるだけの鯖

安直にローカルのファイルをブラウザに見せるだけの鯖を作りたい。 ※正直npmでpackage.jsonでの管理もしたくないレベルの場合に使用したい。

理由は簡単で、esmoduleでファイルを書くと、モジュールファイルがfile:///のスキーマからでは 悪意の有る第三者の攻撃(ローカルに落としたHTMLファイルから他のファイルを見ることが出来ちゃうよ)により 弾かれるようになってしまった。

なので、超絶簡単にサーバーを自前で建ててHTML+js+CSSのアプリを作りたい。 OS種別とか気にしたくもないのでnodejsが入ってる前提でサクッと。

実行は

node server.mjs

server.mjsの中身は以下の通り

import fs from 'fs';
import http from 'http';
const exts = {
    js: 'text/javascript',
    css: 'text/css',
    html: 'text/html',
};
const PORT = 8085;

http
    .createServer(function (req, res) {
        const url = req.url.replace('../', '/');
        const urls = url.split('.');
        const ext = urls[urls.length - 1];
        console.log('req url:' + url);
        try {
            res.writeHead(200, {
                'Content-Type': exts[ext] ? exts[ext] : 'text/plain',
            });
            const file = fs.readFileSync('.' + url);
            const responseMessage = file;
            res.end(responseMessage);
        } catch (e) {
            res.writeHead(404, {
                'Content-Type': exts[ext] ? exts[ext] : 'text/plain',
            });
            console.log('req e:' + e);
            res.end('NOT FOUND');
        }
    })
    .listen(PORT, '127.0.0.1');