node.js学习笔记整理(二)

(1)前端项目自动化构建

1、创建myProject项目文件以及对应的文件夹

var projectData ={
    'name':'myProject',
    'fileData':[
        {
            'name':'css',
            'type':'dir'
        },{
            'name':'js',
            'type':'dir'
        },{
            'name':'images',
            'type':'dir'
        },{
            'name':'index.html',
            'type':'file',
            'content' : '<html>\n\t<head>\n\t\t<title>title</title>\n\t</head>\n\t<body>\n\t\t<h1>Hello</h1>\n\t</body>\n</html>'
        }
    ]
};

var fs = require('fs');

if(projectData.name){
    // 创建项目文件夹
    fs.mkdirSync(projectData.name);
    var fileData = projectData.fileData;
    if(fileData && fileData.length){
        fileData.forEach(function(file){
             //文件或文件夹路径
             file.path = './'+projectData.name +'/'+ file.name;
             //根据type类型创建文件或文件夹
             file.content = file.content || '';

             switch(file.type){
                 case 'dir':
                     fs.mkdirSync(file.path);
                     break;

                 case 'file':
                     fs.writeFileSync(file.path,file.content);
                     break;
                 default:
                     break;
             }

        });
    }

}

2、自动打包多个文件

var fs = require('fs');
var filedir = './myProject/dist';

fs.exists(filedir,function(isExists){
    if(!isExists){
       fs.mkdirSync(filedir);
    }
    fs.watch(filedir,function(ev,file){
        //只要有一个文件发生了变化,我们就需要对文件夹下的所有文件进行读取、合并
        fs.readdir(filedir,function(err,dataList){
            var arr = [];
            dataList.forEach(function(file){
                if(file){
                    //statSync查看文件属性
                    var info = fs.statSync(filedir + '/' +file);
                    //mode文件权限
                    if(info.mode === 33206){
                        arr.push(filedir + '/' +file);
                    }
                }
            });
            //读取数组中的文件内容
            var content = '';
            arr.forEach(function(file){
                var c = fs.readFileSync(file);
                content += c.toString()+'\n';
            });
           //合并文件中的内容
           fs.writeFileSync('./myProject/js/index.js',content);

        })

    });
});

(2)使用node进行web开发

1、搭建一个http的服务器,用于处理用户发送的http请求

//加载一个http模块
var http = require('http');
//通过http模块下的createServer创建并返回一个web服务器对象
var server = http.createServer();
//开启 HTTP 服务器监听连接,只有调用了listen方法以后,服务器才开始工作
server.listen(8000,'localhost');
//服务器是否正在监听连接
server.on('listening',function(){
    console.log("listening..........");
});
//每次接收到一个请求时触发,每个连接可能有多个请求(在 HTTP keep-alive 连接的情况下)。
server.on('request',function(){
     res.write('<p>hello</p>');
     res.end();
});

2、request方法有两个参数:request、response

1)request:http.IncomingMessage的一个实例,获取请求的一些信息,如头信息,数据等
httpVession:使用的http协议的版本
headers:请求头信息中的数据
url:请求的地址
method:请求的方式

2)response:http.ServerResponse的一个实例,可以向请求的客户端输出返回响应
write(chunk,encoding):发送一个数据块到相应正文中
end(chunk,encoding):当所有的正文和头信息发送完成以后调用该方法告诉服务器数据已经全部发送完成了,这个方法在每次完成信息发送以后必须调用,并且是最后调用。
statusCode:该属性用来设置返回的状态码
setHeader(name,value):设置返回头信息
writeHead(statusCode,reasonPhrase,headers)这个方法只能在当前请求中使用一次,并且必须在response.end()之前调用

3、使用fs模块实现行为表现分离

var http = require('http');
var url = require('url');
var fs = require('fs');

var server = http.createServer();
//html文件的路径
var htmlDir = __dirname + '/html/';
server.on('request',function(request,response){
    var urlStr = url.parse(request.url);
    //根据pathname匹配对应的html文件
    switch(urlStr.pathname){
        case '/':
            sendData(htmlDir + 'index.html',request,response);
            break;
        case '/user':
            sendData(htmlDir + 'user.html',request,response);
            break;
        case '/login':
            sendData(htmlDir + 'login.html',request,response);
            break;
        default:
            //处理其他情况
            sendData(htmlDir + 'err.html',request,response );
            break;
    }
});

function sendData(file,request,response){
    //读取文件,存在则返回对应读取的内容,不存在则返回错误信息
    fs.readFile(file,function(err,data){
        if(err){
            response.writeHead(404,{
                'content-type':'text/html;charset=utf-8'
            });
            response.end('<h1>页面不存在</h1>')
        }else{
            response.writeHead(200,{
                'content-type':'text/html;charset=utf-8'
            });
            response.end(data);
        }
    })
}
server.listen(8000,'localhost');

猜你喜欢

转载自www.cnblogs.com/fangnianqin/p/10179577.html