server.js
'use strict';
const http = require('http');
const url = require('url');
const fs = require('fs');
const path = require('path');
//default config
let config = {
ip: '0.0.0.0',
port: 4000,
defaultDirectory: process.cwd() + '/public'
}
const server = http.createServer();
initConfig();
// listen request
server.on('request', (req, res) => {
let urlpath = url.parse(req.url);
let pathname = decodeURIComponent(urlpath.pathname);
//default index.html
if (pathname === "/") pathname += "index.html";
//get full path
let fullPath = path.join(config.defaultDirectory, pathname);
fs.exists(fullPath, (exists) => {
if (exists) {
fs.readFile(fullPath, (err, data) => {
if (err) {
res.statusCode = 500;
res.statusMessage = 'Internal Server Error';
res.write('Internal Server Error');
res.end();
} else {
res.writeHead(200, {
'content-type': getMimeType(fullPath)
});
res.write(data);
res.end();
}
})
} else {
res.statusCode = 404;
res.statusMessage = 'Not found';
res.write('file Not found');
res.end();
}
})
// get MimiType by file path
function getMimeType(file) {
let i = file.lastIndexOf("."),
ext = (i === -1) ? "default" : file.substr(i),
mimeTypes = {
".bmp": "image/bmp",
".css": "text/css",
".gif": "image/gif",
".htm": "text/html",
".html": "text/html",
".jpg": "image/jpeg",
".jpeg": "image/jpeg",
".js": "application/javascript",
".json": "application/json",
".otf": "font/opentype",
".png": "image/png",
".text": "text/plain",
"default": "application/octet-stream"
};
return mimeTypes[ext.toLowerCase()];
}
})
// get start-up parameters
//but process.argv is 2 start
function initConfig() {
let array = process.argv;
for (var i = 2; i < array.length; i += 2) {
switch (array[i]) {
case '-d':
config.defaultDirectory = (array[i + 1] === undefined ? config.defaultDirectory : array[i + 1]);
break;
case '-p':
config.port = (array[i + 1] === undefined ? config.port : array[i + 1]);
break;
case '-h':
config.ip = (array[i + 1] === undefined ? config.ip : array[i + 1]);
break;
case '-help':
usage();
process.exit();
break;
default:
break;
}
}
}
/*
usage
print help
*/
function usage() {
let SWITCHES = [
'-d appoint this directory to listen to',
'-p port to listen on',
'-h this ip to setting',
'-help show this help screen'
];
SWITCHES.forEach(elem => {
// body...
process.stdout.write(elem+"\n");
//console.log(elem);
});
}
//start listen
server.listen(config.port, config.ip, () => {
console.log(`${config.ip}:${config.port} start`);
})
使用方法
node server.js
参数
* -d
目录 默认 public
-
-p
端口 默认 4000 -
h
ip 默认 0.0.0.0 -
-help
帮助
例如
node server.js -d ./public01
Web最新资讯,请关注我的微信公众号“一起玩前端”或扫描二维码关注.
qrcode_for_gh_7a765c30aeb7_258.jpg
网友评论