您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> Web开发 >> (javascript)node不利用框架怎么实现对静态HTML、css、js的服务?

(javascript)node不利用框架怎么实现对静态HTML、css、js的服务?

来源:网络整理     时间:2016/5/11 22:58:44     关键词:HTML,node

关于网友提出的“(javascript)node不利用框架怎么实现对静态HTML、css、js的服务?”问题疑问,本网通过在网上对“(javascript)node不利用框架怎么实现对静态HTML、css、js的服务?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题:(javascript)node不利用框架怎么实现对静态HTML、css、js的服务?
描述:

初学nodeJS,在使用nodejs构建静态文件服务器的时候,遇到下面问题。
用户请求index.html时,我使用fs.readFile读取index.html并将data返回,代码如下:

function serverStatic(req,res){
    var filePath;
    if(req.url==="/"){
        filePath =  "index.html";
    } else{
        filePath = "./" + url.parse(req.url).pathname;
    }

         fs.exists(filePath,function(err){
             if(err){
                  send404(res);
             }else{
                 fs.readFile(filePath,function(err,data){
                     if(err){
                         res.end("

500

服务器内部错误!"); }else{ res.writeHead(200,{'content-type':'text/html'}); res.end(data.toString()); } });//fs.readfile } })//path.exists }//serverStatic

那么问题来了,如果我的HTML页面引用了外部的css或者js,那么这些外部文件不会被加载···
这个问题怎么解决?

尝试:
index源码:






    
    
        看看伸缩盒?
    
    

css:

body{background-color:red;}
 

app.js:

var http=require('http');
var fs=require('fs');
var url=require('url');
var path=require('path');
var PORT=9090;
//添加MIME类型
var MIME_TYPE = {
    "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"
};

var server = http.createServer(serverStatic);
function serverStatic(req,res){
    var filePath;
    if(req.url==="/"){
        filePath =  "index.html";
    } else{
        filePath = "./" + url.parse(req.url).pathname;
    }

    fs.exists(filePath,function(err){
        if(!err){
            send404(res);
        }else{
            var ext = path.extname(filePath);
            ext = ext?ext.slice(1) : 'unknown';
            var contentType = MIME_TYPE[ext] || "text/plain";
            fs.readFile(filePath,function(err,data){
                if(err){
                    res.end("

500

服务器内部错误!"); }else{ res.writeHead(200,{'content-type':contentType}); res.end(data.toString()); } });//fs.readfile } })//path.exists } server.listen(PORT); console.log("Server runing at port: " + PORT + "."); function send404(res){ res.end("

404

file not found

") }

chrome查看网络:
htmlnodecollection,html nodetype,node.js html,html5 node.js,java node类,node.js,node-odata使用jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播,奔驰e node,node.js开发工具,node.js 视频jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播,node,node.js是什么,node是什么意思,node.js下载,node.js开发指

我的文件结构
htmlnodecollection,html nodetype,node.js html,html5 node.js,java node类,node.js,node-odata使用jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播,奔驰e node,node.js开发工具,node.js 视频jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播,node,node.js是什么,node是什么意思,node.js下载,node.js开发指
htmlnodecollection,html nodetype,node.js html,html5 node.js,java node类,node.js,node-odata使用jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播,奔驰e node,node.js开发工具,node.js 视频jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播,node,node.js是什么,node是什么意思,node.js下载,node.js开发指


解决方案1:

下面是一个静态文件访问的模块

/**
 * 引入模块
 * @type {[type]}
 */
var fs   =require("fs");
var mime =require("mime");
var path =require("path");

/*******************************************************************************************/

/**
 * [Send 创建发送响应对象]
 */
function Send(){};
Send.prototype.cache={};//设置缓存变量,因为缓存变量比读取文件要快

/**
 * 错误404页面
 * @param  {[type]} res [description]
 * @return {[type]}     [description]
 */
Send.prototype.err404 = function(res){
    res.writeHead(404,{"Content-Type":"text/plain"});
    res.write("404 Not Fount !");
    res.end();
};

/**
 * 正确访问页面
 * @param  {[type]} res         [description]
 * @param  {[type]} fileName    [description]
 * @param  {[type]} fileContent [description]
 * @return {[type]}             [description]
 */
Send.prototype.sendFile = function(res,fileName,fileContent){
    res.writeHead(200,{"Content-Type":mime.lookup(path.basename(fileName))});
    res.end(fileContent);

};

/**
 * 发送静态页面方法
 * @param  {[type]} res     [description]
 * @param  {[type]} absPath [description]
 * @return {[type]}         [description]
 */
Send.prototype.serveStatic = function(res,absPath){
    var _this=this;
    if(this.cache[absPath]){
        this.sendFile(res,absPath,this.cache[absPath]);
    }else{
        fs.exists(absPath,function(exists){
            if(exists){
                fs.readFile(absPath,function(err,data){
                    if(err){
                        _this.err404(res);
                    }else{
                        _this.sendFile(res,absPath,data);
                    }
                })
            }else{
                _this.err404(res);
            }
        })

    }
};

Send.prototype.staticDirectory=function(req,url){
    var filePath=false;
    if(new RegExp("^/"+url+"/.*").test(req.url)){
         filePath=url+req.url;
    }
    var absPath="./"+filePath;

    return absPath;

}

/*******************************************************************************************/

module.exports=Send;

调用方法

/**
 * 引入HTTP组建,创建HTTP服务器的核心组件
 * @type {[type]}
 */
var http=require("http");
var sio=require("socket.io");

/**
 * 引入自定义组件,
 * @type {[type]}
 */
var staticService=require("./modules/staticService");

/*************************************************/

/**
 * 创建http服务
 * @param  {[type]} req    [description]
 * @param  {[type]} res){                 var filePath [description]
 * @return {[type]}        [description]
 */
var server = http.createServer(function(req,res){
    var send=new staticService();
    var absPath=send.staticDirectory(req,"public")
    send.serveStatic(res,absPath);
});

server.listen(8200,function(){
    console.log("Http server create success on : localhost:8200");
})

解决方案2:

问题已解决,link css的时候,不能忘了 rel="stylesheet"

解决方案3:

那么问题来了,你的为请求的每个资源写读取文件处理

解决方案4:

前几天刚有人问这个问题的
http://segmentfault.com/q/1010000004317668?_ea=567469
利用nodejs搭建静态文件服务器

解决方案5:

fs.exists(filePath,function(err)

如果文件存在,回掉函数的第1个参数为true

var http=require('http');
var fs=require('fs');
var url=require('url');
var path=require('path');
var PORT=9090;
//添加MIME类型
var MIME_TYPE = {
    "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"
};

var server = http.createServer(serverStatic);
function serverStatic(req,res){
    var filePath;
    if(req.url==="/"){
        filePath =  "CSSTest.html";
    } else{
        filePath = "./" + url.parse(req.url).pathname;
    }

    fs.exists(filePath,function(err){
        if(!err){
            send404(res);
        }else{
            var ext = path.extname(filePath);
            ext = ext?ext.slice(1) : 'unknown';
            var contentType = MIME_TYPE[ext] || "text/plain";
            fs.readFile(filePath,function(err,data){
                if(err){
                    res.end("

500

服务器内部错误!"); }else{ res.writeHead(200,{'content-type':contentType}); res.end(data.toString()); } });//fs.readfile } })//path.exists } server.listen(PORT); console.log("Server runing at port: " + PORT + ".");

以上介绍了“(javascript)node不利用框架怎么实现对静态HTML、css、js的服务?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/1034861.html

相关图片

相关文章