nodejs处理图片、CSS、JS链接

接触Nodejs不深,看到页面上每一个链接都要写一个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 。

时间: 2024-10-05 04:58:59

nodejs处理图片、CSS、JS链接的相关文章

HTML/CSS/JS编码规范

最近整理了一份HTML/CSS/JS编码规范,供大家参考.目录:一.HTML编码规范二.CSS编码规范三.JS编码规范 一.HTML编码规范 1. img标签要写alt属性 根据W3C标准,img标签要写alt属性,如果没有就写一个空的.但是一般要写一个有内容的,根据图片想要表达的意思,因为alt是在图片无法加载时显示的文字.如下不太好的写法: <img src="company-logo.svg" alt="ABC Company Logo"> 更好的

WordPress引入css/js两种方法

WordPress引入css/js 是我们制作主题时首先面对的一个难点,任何一款主题都要加载自己的css,js,甚至很有可能还需要加载Jquery文件,网上方法特多,说法不一,我们今天借鉴wordpress官方最新的twentysixteen主题来学习总结一下WordPress引入css/js各种常用方法,以及最优化的加载方法. 其实网上的N种方法总结起来就两种:一.模板文件header.php中直接引入文件二.在主题的functions.php中通过WP自带的函数wp_enqueue_scri

Sublime Text2格式化HMTL/CSS/JS插件HTML-CSS-JS Prettify

之前格式化用过JSFormat,今天在GitHub发现了一个比较好的插件HTML-CSS-JS Prettify,具体的地址https://github.com/victorporof/Sublime-HTMLPrettify,安装插件的话需要安装Node.js,具体操作如下: 1.官网下载Node.js,地址http://nodejs.org/download(本人电脑Win8 64) 2.Sublime中ctrl+shift+p,输入ip: 3.点击Install Package,然后搜索H

sublime 格式化 插件HMTL/CSS/JS

https://github.com/victorporof/Sublime-HTMLPrettify 安装插件的话需要安装Node.js,具体操作如下: 1.官网下载Node.js,地址 http://nodejs.org 2.右击页面多了一个HTML/CSS/JS Prettiy的选项,设置一下Node路径: "node_path": { "windows": "D:/Program Files/nodejs/node.exe", "

实验楼一个很好的IT学习平台,包括JAVA,LINUX,HTML,C,CSS,JS等适合初学者

实验楼一个很好的IT学习平台,包括JAVA,LINUX,HTML,C,CSS,JS等适合初学者,网址 网址链接点击打开

css+js自动化开发之第十五天

一.css上一篇的补充 1.position(页面分层) (1)fiexd将标签固定在页面的某个位置 position属性:top,left,right,bottom (2)relative+absolute配合使用,定位到父标签框的相对位置 <div style="position: relative;background-color: #339ba3;height: 200px;width: 500px;border: 1px solid red;margin: 0 auto"

一款CSS+JS+DIV制作的蓝色风格tab滑动门

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>一款CSS+JS+DIV制作的蓝色风格ta

asp.net 后台添加css,js,meta

首先导入命名空间 using System.Web.UI.HtmlControls; 1 /// <summary> 2 /// 添加JS脚本链接 3 /// </summary> 4 /// <param name="page">页面</param> 5 /// <param name="url">路径</param> 6 public void AddJS(System.Web.UI.Pag

html+css+js实现复选框全选与反选

1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2 <html> 3 <head> 4 <title>html+css+js实现复选框全选与反选</title> 5 <meta http-equiv="content-type&qu