安直にローカルのファイルをブラウザに見せるだけの鯖を作りたい。 ※正直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');