开发者社区> 问答> 正文

nodejs中css,js加载的问题,报错如图,用了fs.readFile就没事了,为啥?

//加载静态文件,结果加载css,js的时候会报错
function static_server_file(file,res){
    var rs = fs.createReadStream(file);
    var contents;
    console.log(content_type(file));
    res.writeHead(200,{'Content-Type':content_type(file)});
    
    rs.on('readable',function(){
        var d = rs.read();
        var str;
        if(d){
            if(typeof d == 'string'){
                str = d;
            }else if( typeof d == 'object' && d instanceof Buffer){
                str = d.toString('utf-8');
            }
        }
        if(str){
            if(!contents){
                contents = str;
            }else{
                contents += str;
            }
        }
        //res.write(contents);
    });
    rs.on('end',function(){
        //console.log(contents);
        res.write(contents);
        res.end();
    });
    rs.on('error',function(e){
        res.writeHead(404,{'Content-Type':'appalication/json'});
        var out = {
            error:'not found',
            message:file+'not found'
        };
        res.end(JSON.toString(out));
        return;
    })
    
}
//根据文件确定mine类型
function content_type(file){
    var extname = path.extname(file);
    var type;
    switch(extname.toLowerCase()){
        case '.html':
        type = 'text/html';
        break;
        case '.js':
        type = 'text/javascript';
        break;
        case '.css':
        type = 'text/css';
        break;
        case '.jpg':
        type = 'image/jpg';
        break;
        default:type = 'text/plain';
    }
    return type;
}
//这是修改后的版本,加载css,js的时候没有问题,这是为什么
function static_server_file(file,res){

    fs.readFile(file,function(err,data){
        if(err){
            if(err && err.error == 'no_such_album'){
                send_failure(res,404,err);
            }else{
                send_failure(res,500,err);
            }
        }
        
        res.writeHead(200,{'Content-Type':content_type(file)});
        res.write(data);
        res.end();    
    });
}

展开
收起
a123456678 2016-03-11 10:34:24 2031 0
1 条回答
写回答
取消 提交回答
  • 你的这个 函数 static_server_file 里面处理这么复杂干什么呢?

    function static_server_file(file,res){
        var rs = fs.createReadStream(file);
        var contents;
        console.log(content_type(file));
    
        rs.on('readable',function(){
            res.writeHead(200,{'Content-Type':content_type(file)});
    
            rs.pipe(res);
        });
        
        rs.on('error',function(e){
            res.writeHead(404,{'Content-Type':'appalication/json'});
            var out = {
                error:'not found',
                message:file+'not found'
            };
            res.end(JSON.toString(out));
            return;
        })
    }
    2019-07-17 18:58:37
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
探究 Node.js 的服务端之路 立即下载
个推微服务实践 基于OpenResty 和Node.js 立即下载
沪江基于Node.js大规模应用实践 立即下载

相关实验场景

更多