-
Notifications
You must be signed in to change notification settings - Fork 2
/
server.js
71 lines (66 loc) · 2.41 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/* Webコンテンツ開発用 Node.js簡易Webサーバーサンプル */
// Web サーバーが Listen する IP アドレス
var LISTEN_IP = process.argv[2 + 0] || '127.0.0.1';
// Web サーバーが Listen する ポート
var LISTEN_PORT = 8086;
// ファイル名が指定されない場合に返す既定のファイル名
var DEFAULT_FILE = "index.html";
// ルートとして扱うディレクトリ名
var ROOT_DIR = '/';
var http = require('http'),
fs = require('fs');
// 拡張子を抽出
function getExtension(fileName) {
var fileNameLength = fileName.length;
var dotPoint = fileName.indexOf('.', fileNameLength - 5);
var extn = fileName.substring(dotPoint + 1, fileNameLength);
return extn;
}
// content-typeを指定
function getContentType(fileName) {
var extentsion = getExtension(fileName).toLowerCase();
var contentType = {
'html': 'text/html',
'htm': 'text/htm',
'css': 'text/css',
'js': 'text/javaScript; charset=utf-8',
'json': 'application/json; charset=utf-8',
'xml': 'application/xml; charset=utf-8',
'jpeg': 'image/jpeg',
'jpg': 'image/jpg',
'gif': 'image/gif',
'png': 'image/png',
'mp3': 'audio/mp3',
};
var contentType_value = contentType[extentsion];
if (contentType_value === undefined) {
contentType_value = 'text/plain';
}
return contentType_value;
}
// Webサーバーのロジック
var server = http.createServer();
server.on('request', function(request, response) {
var requestedFile = ROOT_DIR + request.url + (request.url === '/' ? DEFAULT_FILE : '');
console.log('Requested Url:' + request.url);
console.log('Handle Url:' + requestedFile);
console.log('File Extention:' + getExtension(requestedFile));
console.log('Content-Type:' + getContentType(requestedFile));
fs.readFile('.' + requestedFile, 'binary', function(err, data) {
if (err) {
response.writeHead(404, {
'Content-Type': 'text/plain'
});
response.write('not found\n');
response.end();
} else {
response.writeHead(200, {
'Content-Type': getContentType(requestedFile)
});
response.write(data, "binary");
response.end();
}
});
});
server.listen(LISTEN_PORT, LISTEN_IP);
console.log('Server running at http://' + LISTEN_IP + ':' + LISTEN_PORT);