Nodejs实现的一个静态服务器例子
2023-09-14 09:01:05 时间
参考cnodejs.org上面的静态服务器例子,写了下面的一个nodejs静态服务器例子,里面包含cache,压缩,贴代码如下
/** * 静态文件服务器测试例子 * User: xuwm * Date: 13-5-17 * Time: 上午8:38 * To change this template use File | Settings | File Templates. var port=3333; var http = require("http"); var url = require("url"); var fs = require("fs"); var path = require("path"); var mime = require("./mime").types; var config = require("./config"); var zlib = require("zlib"); //创建http服务端 var server=http.createServer(function(request,response){ var obj= url.parse(request.url); response.setHeader("Server","Node/V8"); console.log(obj); var pathname=obj.pathname; if(pathname.slice(-1)==="/"){ pathname=pathname+config.Welcome.file; //默认取当前默认下的index.html var realPath = path.join("assets", path.normalize(pathname.replace(/\.\./g, ""))); console.log(realPath) ; var pathHandle=function(realPath){ //用fs.stat方法获取文件 fs.stat(realPath,function(err,stats){ if(err){ response.writeHead(404,"not found",{Content-Type:text/plain}); response.write("the request "+realPath+" is not found"); response.end(); }else{ if(stats.isDirectory()){ }else{ var ext = path.extname(realPath); ext = ext ? ext.slice(1) : unknown; var contentType = mime[ext] || "text/plain"; response.setHeader("Content-Type", contentType); var lastModified = stats.mtime.toUTCString(); var ifModifiedSince = "If-Modified-Since".toLowerCase(); response.setHeader("Last-Modified", lastModified); if (ext.match(config.Expires.fileMatch)) { var expires = new Date(); expires.setTime(expires.getTime() + config.Expires.maxAge * 1000); response.setHeader("Expires", expires.toUTCString()); response.setHeader("Cache-Control", "max-age=" + config.Expires.maxAge); if (request.headers[ifModifiedSince] lastModified == request.headers[ifModifiedSince]) { console.log("从浏览器cache里取") response.writeHead(304, "Not Modified"); response.end(); } else { var raw = fs.createReadStream(realPath); var acceptEncoding = request.headers[accept-encoding] || ""; var matched = ext.match(config.Compress.match); if (matched acceptEncoding.match(/\bgzip\b/)) { response.writeHead(200, "Ok", {Content-Encoding: gzip}); raw.pipe(zlib.createGzip()).pipe(response); } else if (matched acceptEncoding.match(/\bdeflate\b/)) { response.writeHead(200, "Ok", {Content-Encoding: deflate}); raw.pipe(zlib.createDeflate()).pipe(response); } else { response.writeHead(200, "Ok"); raw.pipe(response); pathHandle(realPath); server.listen(port); console.log("http server run in port:"+port);
首先需要在JS文件里创建一个assets的文件夹,里面放入你要浏览的静态文件,比如,index.html,demo.js等。
运行方式为:在命令行里切换到上面的JS的文件目录,然后输入 node JS文件名
浏览器内输入http://localhost:3333/就会看到效果。
--补上上面代码里缺少的两个模块
mime.js
exports.types = { "css": "text/css", "gif": "image/gif", "html": "text/html", "ico": "image/x-icon", "jpeg": "image/jpeg", "jpg": "image/jpeg", "js": "text/javascript", "json": "application/json", "pdf": "application/pdf", "png": "image/png", "svg": "image/svg+xml", "swf": "application/x-shockwave-flash", "tiff": "image/tiff", "txt": "text/plain", "wav": "audio/x-wav", "wma": "audio/x-ms-wma", "wmv": "video/x-ms-wmv", "xml": "text/xml"
config.js
Python网络编程——静态Web服务器面向对象 把Web服务器抽象成一个类,方法初始化,在初始化中建立套接字对线。提供一个开启Web服务器的方法,让Web服务器处理客户端的请求。
Python网络编程——静态Web服务器多任务版 使用多线程,让web服务器可以同时处理多个用户的访问。当客户端和服务端建立连接成功,创建子线程,使用子线程专门处理客户端的请求,防止主线程阻塞。把创建的子线程设置成为守护主线程,防止主线程无法退出。
相关文章
- MEVN 架构(MongoDB + Express + Vue + NODEJS)搭建
- nodejs和树莓派开发以及点亮RGB的LED灯代码
- 【nodejs原理&源码杂记(8)】Timer模块与基于二叉堆的定时器
- nodejs 调用win32 api
- nodejs gm
- nodejs中的buffer
- nodejs
- 和你讲一讲NodeJS中的Events(事件触发器)
- nodejs连接redis,redis服务器的地址格式应该怎么写
- npm被玩坏了:修复nodejs(‘npm‘ 不是内部或外部命令)
- nodejs读书笔记
- centos 彻底删除nodejs默认安装文件
- 【nodejs原理&源码赏析(9)】用node-ssh实现轻量级自动化部署
- 简单的nodejs http-server httpserver
- go语言笔记——多值函数,本质上和nodejs的回调很像,不过nodejs是回调的第一个参数是err,而golang里是第二个!