-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
99 lines (74 loc) · 2.11 KB
/
index.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
var http = require('http');
var url = require('url');
var path = require('path');
var fs = require('fs');
var mime = require('mime');
function easyServer(root, options){
var opt = options || {};
var port = opt.port || 3000;
var headers = opt.headers;
var mtime;
var size;
http.createServer(function(req, res){
//ignore favicon.ico
if(req.url === "/favicon.ico"){
return;
}
var file = path.join(root, url.parse(req.url).pathname);
console.info(Date() + ": GET file:" + file);
fs.exists(file, function(exists){
if(exists){
var stats = fs.statSync(file);
mtime = stats.mtime;
size = stats.size;
// console.log(mtime);
// console.log(mtime.toUTCString())
// console.log(new Date(mtime.getTime()).toUTCString())
// console.log(req.headers['if-modified-since'])
}else{
res.writeHead(404);
res.end('can not found the file:' + file);
console.log('GET file(' + file + ') Fail.')
return;
}
if(req.headers['if-modified-since'] && req.headers['if-modified-since'] === mtime.toUTCString()){
res.writeHead(304);
res.end();
}else{
res.setHeader('Content-Length', size);
res.setHeader('Content-type', mime.lookup(file));
res.setHeader('Server', 'EasyServer');
res.setHeader('X-Powered-By', 'C.J.L');
res.setHeader('Last-Modified', new Date(mtime.getTime()).toUTCString());
//自定义header
if(headers){
var keys = Object.keys(headers);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
res.setHeader(key, headers[key]);
}
}
res.writeHead(200);
var s = fs.createReadStream(file);
var chunkTemp = "";
s.on('data', function(chunk){
// console.log(chunk.length)
//res.write(chunk);
chunkTemp += chunk;
})
s.on('end', function(){
res.end(chunkTemp);
})
s.on('close', function(){
console.log('GET file(' + file + ') Success.')
})
s.on('error', function(err){
res.writeHead(500);
res.end('Server Error');
})
}
})
}).listen(port)
console.info("start server at port: " + port);
}
module.exports = easyServer;