前提・実現したいこと
nodejsの勉強のためシンプルなwebサーバー作りに挑戦しています。
├── README.md ├── config.js ├── htdocs │ ├── about │ │ └── index.html │ ├── assets │ │ ├── css │ │ │ └── style.css │ │ ├── img │ │ └── js │ ├── company │ │ └── index.html │ └── index.html └── script.js
現在上記の構成で、とりあえずhtdocsをドキュメントルートとしてnodejsを書いていきたいと考えています。
最終的には以下を目標としてサーバーを作っていきたいです。
- アクセスしたときにいろんなタイプのファイルをきちんと表示できる
- DBとの連携
- EXPRESSは使わない
初投稿ですが、アドバイスよろしくお願いいたします。
該当のソースコード
script.js
1//Web サーバーが Listen する IP アドレス 2var LISTEN_IP = '127.0.0.1'; 3//Web サーバーが Listen する ポート 4var LISTEN_PORT = 3000; 5//ファイル名が指定されない場合に返す既定のファイル名 6var DEFAULT_FILE = "index.html"; 7 8var http = require('http'), 9 fs = require('fs'); 10 11//拡張子を抽出 12function getExtension(fileName) { 13 var fileNameLength = fileName.length; 14 var dotPoint = fileName.indexOf('.', fileNameLength - 5); 15 var extn = fileName.substring(dotPoint + 1, fileNameLength); 16 return extn; 17} 18 19//content-type を指定 20function getContentType(fileName) { 21 var extentsion = getExtension(fileName).toLowerCase(); 22 var contentType = { 23 'html': 'text/html', 24 'htm': 'text/htm', 25 'css': 'text/css', 26 'js': 'text/javaScript; charset=utf-8', 27 'json': 'application/json; charset=utf-8', 28 'xml': 'application/xml; charset=utf-8', 29 'jpeg': 'image/jpeg', 30 'jpg': 'image/jpg', 31 'gif': 'image/gif', 32 'png': 'image/png', 33 'mp3': 'audio/mp3', 34 }; 35 var contentType_value = contentType[extentsion]; 36 if (contentType_value === undefined) { 37 contentType_value = 'text/plain'; 38 }; 39 return contentType_value; 40} 41 42//Web サーバーのロジック 43var server = http.createServer(); 44server.on('request', 45 function (request, response) { 46 console.log('Requested Url:' + request.url); 47 var requestedFile = request.url; 48 requestedFile = (requestedFile.substring(requestedFile.length - 1, 1) === '/') ? requestedFile + DEFAULT_FILE : requestedFile; 49 console.log('Handle Url:' + requestedFile); 50 console.log('File Extention:' + getExtension(requestedFile)); 51 console.log('Content-Type:' + getContentType(requestedFile)); 52 fs.readFile('/htdocs' + requestedFile, 'binary', function (err, data) { 53 if (err) { 54 response.writeHead(404, { 55 'Content-Type': 'text/plain' 56 }); 57 response.write('not found\n'); 58 response.end(); 59 } else { 60 response.writeHead(200, { 61 'Content-Type': getContentType(requestedFile) 62 }); 63 response.write(data, "binary"); 64 response.end(); 65 } 66 }); 67 } 68); 69 70server.listen(LISTEN_PORT, LISTEN_IP); 71console.log('Server running at http://' + LISTEN_IP + ':' + LISTEN_PORT);
https://blogs.msdn.microsoft.com/osamum/2015/05/29/web-node-js-web/
↑こちらから拝借したコードです。
試したこと
var requestedFile = request.url;
を
var requestedFile = '/htdocs' + request.url;
に変更したり
他の箇所に'/htdocs'
を追加したりしたのですが、イマイチうまくいきませんでした。
補足情報(FW/ツールのバージョンなど)
terminalよりnode script.js
のコマンドでローカルサーバーを起動?しています。
どこかのサイトにはnodejsにはdocumentrootの概念がない、と書かれていました。
こういった問題は、nodejsではなくapatchやnginxなどで解決させるものなのでしょうか?
サーバーの勉強を始めたばかりで、無知でお恥ずかしいのですが、どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/26 07:55