Node.js—学习

一、Node.js

1. Hello World

var  http  =  require('http');  
http.createServer(function(request,  response)  {  
    response.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});  
    if(request.url!=="/favicon.ico"){  //清除第2此访问  
        console.log('访问');  
        response.write('hello,world');  
        response.end('hell,世界');//不写则没有http协议尾,但写了会产生两次访问  
    }  
}).listen(8000);  
console.log('Server  running  at  http://127.0.0.1:8000/');  
  
/*  
启动服务  
cmd下执行:  
node  n1_hello.js  
浏览器访问:http://localhost:8000  
*/                  

2. 函数调用

//---服务器node.js---
var http = require('http');    
var otherfun = require('./models/otherfuns.js');      
http.createServer(function(request,response){      
    response.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});      
    if(request.url!=="/favicon.ico"){    //清除第2此访问  
        fun1(response);
        otherfun.controller(request,response);  
        otherfun.call(response); 
        //---使用字符串调用对应的函数---
        funcname = "addContent"
        otherfun[funcname](response);
        otherfun['getVisit'](response);
        response.end('');    
    }  
}).listen(8000);      
console.log('Server running at http://127.0.0.1:8000/');    
//---普通函数---      
function  fun1(res){      
    res.write("你好,我是fun1");      
}     
//---/models/otherfuns.js---
function  controller(req,res){      
    res.write("发送");      
    call('hello',req,res);      
    res.end("");      
}      
function  call(res){      
    console.log('call');      
}      
module.exports  =  controller;    //只支持一个函数     
//只支持多个函数     
module.exports={      
    getVisit:function(){      
    return  visitnum++;      
    },      
    addContent:function(a,b){      
    return  a+b;      
    }      
}      

3. 模块调用

//---node.js---
var http = require('http');    
//var User = require('./models/User');
var Teacher = require('./models/Teacher');
http.createServer(function(request,response){        
    response.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});        
    if(request.url!=="/favicon.ico"){        //清除第2此访问
        //实例化teacher对象
        teacher  =  new  Teacher(1,'李四',30);
        teacher.teach(response);
        response.end('');    
    }
}).listen(8000);   
//---User.js--
function  User(id,name,age){
    this.id=id;
    this.name=name;
    this.age=age;
    this.enter=function(){
        console.log("进入图书馆");
    }
}
module.exports = User;
//---models/Teacher.js---
var User = require('./User');
function Teacher(id,name,age){
    //没有构造方法,继承父类
    User.apply(this,[id,name,age]);
    this.teach=function(res){
        res.write(this.name+"老师讲课");
    }
}
module.exports = Teacher;

4. 路由

//---node.js---
var http = require('http');
var url = require('url');
var router = require('./router');
http.createServer(function(request,response){
    response.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
    if(request.url!=="/favicon.ico"){
        //获取url的路径
        var pathname = url.parse(request.url).pathname;
        //替换掉路径前面的 /
        pathname = pathname.replace(/\//,'');
        router[pathname](request,response);
        response.end('');
    }
}).listen(8000);
//---router.js---
module.exports={
    login:function(req,res){
        res.write("我是login方法");
    },
    zhuce:function(req,res){
        res.write("我是注册方法");
    }
}

5. 文件读取

//---node.js---
var http = require("http");
var optfile = require("./models/optfile");
http.createServer(function(request,response){
    response.writeHead(200,{'Content-Type':'text/html';charset=utf-8'});
    if(request.url!=="/favicon.ico"){
        //闭包函数;防止异步操作时,已经end了,再进行write报错
        function recall(data){
            response.write(data);
            response.end('ok')
        }
        optfile.readfile('./views/login.html',recall);
        console.log('主程序执行完毕');
    }
}).listen(8000)
//---/models/optfile---
var fs = require('fs');
module.exports={
    //同步读取
    readfileSync:function(path){
        var data = fs.readFileSync(path,'utf-8');
        console.log("同步方法执行完毕");
        return data;
    },
    //异步读取
    readfile:function(path,recall){
        fs.readFile(path,function(err,data){
            if(err){
                console.log(err);
            }else{
                console.log(data.toString());
                recall(data);
            }
        })
    }
}
//---修改后路由---
//---node.js---
var http = require('http');
var url = require('url');
var router = require('./router');
var optfile = require("./models/optfile");
http.createServer(function(request,response){
    response.writeHead(200,{'Content-Type':'text/html';charset=utf-8'});
    if(request.url!=="/favicon.ico"){
        //获取url的路径
        var pathname = url.parse(request.url).pathname;
        //替换掉路径前面的 /
        pathname = pathname.replace(/\//,'');
        router[pathname](request,response);
        console.log('主程序执行完毕');
    }
}).listen(8000)
//---router.js---
var optfile = require("./models/optfile");
module.exports={
    login:function(req,res){
        function recall(data){
            res.write(data);
            res.end("");
        }
        optfile.readfile('./views/login.html',recall);
    },
    zhuce:function(req,res){
        function recall(data){
            res.write(data);
            res.end("");
        }
        optfile.readfile('./views/zhuce.html',recall);
    }
}

6. 文件写入

//---node.js---
var http = require('http');
var url = require('url');
var router = require('./router');
var optfile = require("./models/optfile");
http.createServer(function(request,response){
    response.writeHead(200,{'Content-Type':'text/html';charset=utf-8'});
    if(request.url!=="/favicon.ico"){
        //获取url的路径
        var pathname = url.parse(request.url).pathname;
        //替换掉路径前面的 /
        pathname = pathname.replace(/\//,'');
        router[pathname](request,response);
        console.log('主程序执行完毕');
    }
}).listen(8000)
//---/models/optfile---
var fs = require('fs');
module.exports={
    //同步写入
    writefileSync:function(path,data){
        fs.writeFileSync(path,data);
        console.log("同步方法执行完毕");
    },
    //异步读取
    writefile:function(path,data,recall){
        fs.writeFile(path,data,function(err){
            if(err){
                throw err;
            }else{
                console.log("It is saved!");
                recall('写文件成功')
            }
        })
    }
}
//---router.js---
var optfile = require("./models/optfile");
module.exports={
    login:function(req,res){
        function recall(data){
            res.write(data);
            res.end("");
        }
        optfile.readfile('./views/login.html');
    },
    writefile:function(req,res){
        function recall(data){
            res.write(data);
            res.end("");
        }
        optfile.writefile('./views/one.txt','hello world',recall);
    }
}

7. 读取图片

//---node.js---
var http = requrie('http');
var optfile = require('./models/optfile');
http.createServer(function(request,response){
    //读取图片需要时二进制流格式
    response.writeHead(200,{'Content-Type':'image/jpeg'});
    if(request.url!='/favicon.ico'){
        optfile.readImg('./imgs/pig.png',response);
    }
}).listen(8000);
//---/models/optfile---
var fs = require('fs');
module.exports={
    readImg:function(path,res){
        //默认为string,binary是二进制
        fs.readFile(path,'binary',function(err,filedata){
            if(err){
                console.log(err);
                return;
            }else{
                res.write(filedata,'binary');
                res.end();
            }
        })
    }
}

猜你喜欢

转载自www.cnblogs.com/hq82/p/10841421.html