goo blog サービス終了のお知らせ 

パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

Node.jsでファイルを振り分ける

2017-05-17 | コンピュータ
Node.jsでサーバーの画像や音声ファイルにアクセスさせる場合Content-Typeを定義しないといけないらしい。

雛形のコピペでもいいのだけどもう少し楽をすることにしました。
request.urlから簡易拡張子判定を行って同じタイプのものに振り分けています。
server.listenのIPアドレスはローカルサーバのものなので変更が必要です。



Nodeの作り方毎回ググっている気がするのでメモ

(1)フォルダー作って、呼び出すhtmlと関連ファイルを集めて

(2)フォルダーを端末(ターミナル)で開いて
npm install
npm init
でnode.js環境を作成

(3)下のファイルも配置して

(4)node sv5で起動

(5)サーバのフォルダにmain.htmlがある場合はローカルネットワークのブラウザから
http://192.168.11.8:3000/main.htmlでアクセスします。
(IPアドレスは家のローカルの例です。)

クライアント側のマシン、ブラウザごとに挙動が違うのは困ったものです。

sv5.js
var http = require("http");
var fs = require("fs");

var server = http.createServer();
server.on("request", doRequest);
server.listen(3000,"192.168.11.8");
console.log("Server running at 3000");

function getRequestType(request){
  if ( request.url.indexOf(".html") != -1) {
    return "html";
  }
  if ( request.url.indexOf(".jpg") != -1) {
    return "jpeg";
  }
  if ( request.url.indexOf(".wav") != -1) {
    return "wave";
  }
  if ( request.url.indexOf(".css") != -1) {
    return "css";
  }
  return "";
}

function doRequest(request, response) {
    switch(getRequestType(request)) {
    case "html":
        fs.readFile("."+request.url, "UTF-8",
            function (err, data) {
                response.writeHead(200, {"Content-Type": "text/html"});
                response.write(data);
                response.end();
            }
        );
        break;
    case "css":
        fs.readFile("."+request.url, "UTF-8",
            function (err, data) {
                response.writeHead(200, {"Content-Type": "text/css"});
                response.write(data);
                response.end();
            }
        );
        break;
    case "wave":
        fs.readFile("."+request.url, "binary",
            function (err, data) {
                response.writeHead(200, {"Content-Type": "audio/wav"});
                response.write(data, 'binary');
                response.end();
            }
        );
        break;
    case "jpeg":
        fs.readFile("."+request.url, "binary",
            function (err, data) {
                response.writeHead(200, {"Content-Type": "image/jpeg"});
                response.write(data, "binary");
                response.end();
            }
        );
        break;
    }
};

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。