nodejs处理图片、CSS、JS链接
看到页面上每一个链接都要写一个handler,像在页面显示图片,或者调用外部CSS、JS文件,每个链接都要写一个handler,觉得太麻烦,是否可以写个程序出来,能够自动识别图片、CSS、JS文件链接,以后要调用图片、外部CSS 、JS只需要关心前端怎么写,而不用再管后台。于是有了下面的程序。
index.js
var http = require("http");//获取http对象
var url = require("url");//获取url对象
var path = require("path");
var imgExt = new Array(".png",".jpg",".jpeg",".bmp",".gif");
var cssExt = new Array(".css");
var jsExt = new Array(".js");
Array.prototype.contain = function(obj){
for(var i=0; i<this.length; i++){
if(this[i] === obj)
return true;
}
return false;
};
//http、url都是系统自带的模块,而下面的requestHandlers是我们手动编写的模块,对应当前目录下的requestHandlers.js文件
var requestHandlers = require("./requestHandlers");
//onRequest函数,用于处理http请求,不同的url请求交由不同的函数进行处理
function onRequest(request, response){
var pathname = url.parse(request.url).pathname;//获取请求的URL
//requestHandlers的handle属性又是一个对象,该对象包含多组属性:属性值,属性名对应uri,属性值对应处理函数,详见requestHandlers.js
if(typeof requestHandlers.handle[pathname] === "function"){
requestHandlers.handle[pathname](request, response);
}
//处理图片链接
else if(typeConfirm(imgExt,request.url)){
var ext = path.extname(path.basename(request.url)) ;
console.log("ext:" + ext);
requestHandlers.getImage(request, response, pathname);
}
//处理CSS链接
else if(typeConfirm(cssExt,request.url)){
requestHandlers.getCSS(request, response, pathname);
}
//处理JS链接
else if(typeConfirm(jsExt,request.url)){
requestHandlers.getJS(request, response, pathname);
}
else {
console.log("No request handler found for " + pathname);
response.writeHead(404, {"Content-Type": "text/html;charset=utf-8"});
response.write("您访问的页面不存在!访问<a href='/'>首页</a>");
response.end();
}
}
http.createServer(onRequest).listen(8888);
function typeConfirm(type,url){
var ext = path.extname(path.basename(url));
if(type.contain(ext)){
return true;
}
return false;
}
requestHandlers.js
var handle = {};
var formidable = require("formidable");
var fs = require("fs");
handle["/"] = start;
handle["/start"] = start;
//读取文件并输出
function start(request, response) {
fs.readFile("html/index.html", function (err, html) {
if (err) throw err;
response.writeHead(200, {"Content-Type": "text/html"});
response.write(html);
response.end();
});
}
function getImage(request, response, pathname){
//这里需要去掉pathname最前面的"/"符号,fs.readFile()才能识别,所以使用pathname.substring(1)
//或者在pathname前面加上表当前目录的“.”号,推荐使用后面这种
fs.readFile("." + pathname, function (err, result) {
if (err) throw err;
response.writeHead(200, {"Content-Type": "image/jpeg"});
response.write(result,"binary");
response.end();
});
}
function getCSS(request, response, pathname){
//这里必须去掉pathname最前面的"/"符号,fs.readFile()才能识别,所以使用pathname.substring(1)
fs.readFile("." + pathname, function (err, result) {
if (err) throw err;
response.writeHead(200, {"Content-Type": "text/css"});
response.write(result);
response.end();
});
}
function getJS(request, response, pathname){
//这里必须去掉pathname最前面的"/"符号,fs.readFile()才能识别,所以使用pathname.substring(1)
fs.readFile("." + pathname, function (err, result) {
if (err) throw err;
response.writeHead(200, {"Content-Type": "text/javascript"});
response.write(result);
response.end();
});
}
exports.handle = handle;
exports.start = start;
exports.getImage = getImage;
exports.getCSS = getCSS;
exports.getJS = getJS;
注意:
以引用图片为例,img的src属性里路径应该填相对项目根目录的路径。比如root为根目录,某个html文件的路径是root/web/test.html,而图片位于root/web/imges/test.png,则调用该图片文件时路径应该写成/web/images/test.png,而不是直接使用相对路径images/test.png 。
nodejs处理图片、CSS、JS链接的更多相关文章
- iwebshop 自动给css js链接加版本信息
lib/core/tag_class.php case 'theme:': $path = $matches[4]; $exts = strtolower(substr($matches[4], st ...
- nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG
需求描述,由于工作的需要,需要将原本用于1280 720的网页改为1920 1080的网页(电视端页面).需求可以拆分为两部分,代码部分的修改以及图片的修改.在代码部分,需要将所有位置以及大小相关的值 ...
- sublime代码格式化插件HTML/CSS/JS prettify
1. 进入下载链接,安装node.js (根据自己使用版本) https://nodejs.org/en/download/ 注意: 记住node.js的 安装路径 2.sublime HTML/CS ...
- css+js+html基础知识总结
css+js+html基础知识总结 一.CSS相关 1.css的盒子模型:IE盒子模型.标准W3C盒子模型: 2.CSS优先级机制: 选择器的优先权:!important>style(内联样式) ...
- css+js自动化开发之第十五天
一.css上一篇的补充 1.position(页面分层) (1)fiexd将标签固定在页面的某个位置 position属性:top,left,right,bottom (2)relative+abso ...
- 下拉的DIV+CSS+JS二级树型菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 认识大前端html+css+js
认识大前端:前端就是将效果图生成网页,利用html+css+js等技术. 如果把前端比作一台汽车,那么html就是车的骨架,css就是完整的车的模型,而js就充当着车的发动机... 建议: 刚刚开 ...
- C# 封装miniblink 使用HTML/CSS/JS来构建.Net 应用程序界面和简易浏览器
MiniBlink的作者是 龙泉寺扫地僧 miniblink是什么? (抄了一下 龙泉寺扫地僧 写的简洁) Miniblink是一个全新的.追求极致小巧的浏览器内核项目,其基于chromium最新 ...
- HTML---引入css,js | 常用标签示例
一.前端基础包括哪些?如何理解 二.css,js引入_及head中其他标签 三.特殊符号 四.常见的标签 4.1,form表单 4.2,input系列(单选框.复选框.input传文件.重置) 4.3 ...
随机推荐
- 大数据下的Distinct Count(二):Bitmap篇
在前一篇中介绍了使用API做Distinct Count,但是精确计算的API都较慢,那有没有能更快的优化解决方案呢? 1. Bitmap介绍 <编程珠玑>上是这样介绍bitmap的: B ...
- jQuery-1.9.1源码分析系列(二)jQuery选择器
1.选择器结构 jQuery的选择器根据源码可以分为几块 init: function( selector, context, rootjQuery ) { ... // HANDLE: $(&quo ...
- 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续2篇-模板导出综合示例)
自ExcelUtility类推出以来,经过项目中的实际使用与不断完善,现在又做了许多的优化并增加了许多的功能,本篇不再讲述原理,直接贴出示例代码以及相关的模板.结果图,以便大家快速掌握,另外这些示例说 ...
- T-SQL 循环表的一种方式
原文来自:https://www.lesg.cn/netdaima/sqlservert-sql/2016-463.html SsqlServer 中循环表有几种方式 1.临时表 2.游标 3-. 下 ...
- css3实现光标悬浮滚动菜单
效果:http://hovertree.com/texiao/css3/21/ 本文所用到的CSS知识请点击效果展示也中第一和第二个链接. 代码: <!DOCTYPE html> < ...
- B-Tree索引在sqlserver和mysql中的应用
在谈论数据库性能优化的时候,通常都会提到“索引”,但很多人其实并没有真正理解索引,也没有搞清楚索引为什么就能加快检索速度,以至于在实践中并不能很好的应用索引.事实上,索引是一种廉价而且十分有效的优化手 ...
- hexo博客进阶-相册和独立域名
之前我已经写了一篇文章详细的讲述了如何使用hexo搭建github博客.如果还没有看的可以去看看,hexo搭建博客 其实,根据这篇文章的过程我们就能够搭建一个专属于自己,并且非常美观的博客了.但是如果 ...
- K近邻模型(k-NN)
原理 K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻 ...
- GPS数据读取与处理
GPS数据读取与处理 GPS模块简介 SiRF芯片在2004年发布的最新的第三代芯片SiRFstar III(GSW 3.0/3.1),使得民用GPS芯片在性能方面登上了一个顶峰,灵敏度比以前的产品大 ...
- SharePoint 2013 图文开发系列之应用程序页
在SharePoint中,有两种页面类型,一种是保存在数据库中的页面,我们可以在网站的页面库中看到:还有一种叫做应用程序页,部署在服务器上,Layouts下面的页面,是应用程序页,主要是完成特定功能的 ...