Javascript 实现 HttpServer
摘要:
通过 Javascript实现在 Nodejs下运行的 web服务
// package.json
{
"name": "app-ui",
"version": "1.0.0",
"description": "",
"scripts": {
"dev": "node ./server.js"
},
"keywords": [],
"author": "",
"license": "ISC"
}
//server.js
const http = require('http');
const fs = require('fs');
const path = require('path');
function staticServer(options) {
const defaults = {
hostname: "localhost",
port: 3721,
root: "./",
index: "index.html",
openBrowser: false
}
const settings = Object.assign({}, defaults, options);
const server = http.createServer(function (request, response) {
let pathname = request.url;
const rootPath = path.join(__dirname, defaults.root, pathname);
const filePath = path.join(rootPath, pathname.slice(-1) === '/' ? settings.index : "");
if (fs.existsSync(filePath)) {
try {
const extname = path.extname(filePath);
response.setHeader('Content-Type', getMimeType(extname));
const raw = fs.createReadStream(filePath);
response.writeHead(200, "OK");
raw.pipe(response);
} catch (err) {
response.writeHead(500, { 'Content-Encodeing': 'text/plain' });
response.end(err);
}
} else {
response.writeHead(404, { 'Content-Encodeing': 'text/plain' });
response.write("This request URL " + pathname + " was not found on this server.");
response.end();
}
});
const getMimeType = (extname) => {
switch (extname) {
case ".js":
return "application/x-javascript;charset=UTF-8";
case ".css":
return "text/css;charset=UTF-8";
case ".png":
return "image/png";
case ".gif":
return "image/gif";
case ".jpg":
case ".jpeg":
return "image/jpeg";
case ".bmp":
return "image/bmp";
case "svg":
return "image/svg+xml;charset=UTF-8";
case ".pdf":
return "application/pdf";
case ".txt":
case ".1og":
case ".xml":
return "text/plain;charset=UTF-8";
case ".html":
case ".htm":
return "text/html;charset=UTF-8";
default:
return "application/octet-stream";
}
}
const openDefaultBrowser = (url) => {
const { exec } = require('child_process');
switch (process.platform) {
case "darwin":
exec('open ' + url);
break;
case "win32":
exec('start ' + url);
break;
default:
exec('xdg-open', [url]);
}
}
const { hostname, port, openBrowser } = settings;
server.listen(port, hostname, () => {
const url = `http://${hostname}:${port}`;
openBrowser && openDefaultBrowser(url);
})
}
staticServer({ openBrowser: true });
//在当前目录下执行 yarn dev 启动服务