JSをサーバサイドで実行することで、そのJSが置いてある配下のディレクトリから画像を読み込んでくるコードです。
とりあえずapp.jsとか名付けました。
var http = require("http");
var fs = require('fs');
//httpとfsのモジュールを使います
var server = http.createServer(function (req, res) {
//サーバー起動
var url = '.'+(req.url.endsWith("/") ? req.url + "index.html" : req.url);
//URLの最後が/ならindex.htmlを表示し、それ以外はそのURLのファイル名を変数へ。
console.log(url);
//htmlでリクエストされるコンテンツをコンソールに出力してます
if (fs.existsSync(url)) {
//ファイルがあれば
fs.readFile(url, (err, data) => {
if (!err) {
//res.writeHead(200, {"Content-Type": "text/html"}); //本当はこのように書きたいが
res.writeHead(200, {"Content-Type": getType(url)}); //拡張子をみないと書けないので
res.end(data);
}
});
}
}).listen(8080);
function getType(_url) {
//拡張子をみて一致したらタイプを返す関数
var types = {
".html": "text/html",
".css": "text/css",
".js": "text/javascript",
".png": "image/png",
".jpg": "image/jpeg",
".gif": "image/gif",
".svg": "svg+xml"
}
for (var key in types) {
if (_url.endsWith(key)) {
return types[key];
}
}
return "text/plain";
}
このように記述して、以下のようなディレクトリ構成でファイルを設置しました。
app.js
index.html
/img/neko.jpg
index.htmlの中身はこんな感じ。
<!doctype html>
<html lang="ja">
<head>
<style>
img {width:200px;}
</style>
</head>
<body>
<img src="img/neko.jpg">
</body>
</html>
このように猫の画像を設置して、node app.jsとターミナルで実行します。
今回指定したポート番号で以下のURLを叩きましょう。
http://127.0.0.1:8080/
するとこんな感じです。