ndoe.js核心模块

全局对象

process

process.argv会输出一个数组 第一个是node 第二个是脚本文件名
process.stdout.write(“djidas”); 实现的也是输出的功能,但是比console.log()更底层 标砖输出流
process.stdin是标准输入流 初始时是被禁止的 想要使用必须先启动

process.stdin.resume();
process.stdin.on('data',function(data){
    console.log("11"+data.toString());
})

实现的是向屏幕输入什么就会输出什么
process.nextTick(callback)的功能是为事件循环设置下一项任务,node会在下次事件循环响应时调用callback’

function foo() {
    console.error('foo');
}
process.nextTick(foo);
console.error('bar');

会先输出bar在输出foo
我们写的js代码就像是一个国王,而nodejs给国王提供了很多仆人。早上,一个仆人叫醒了国王,问他有什么需要。国王给他一份清单,上面列举了所有需要完成的任务,然后睡回笼觉去了。当国王回去睡觉之后,仆人才离开国王,拿着清单,给其它的仆人一个个布置任务。仆人们各自忙各自的去了,直到完成了自己的任务后,才回来把结果禀告给国王。国王一次只召见一个人,其它的人就在外面排着队等着。国王处理完这个结果后,可能给他布置一个新的任务,或者就直接让他走了,然后再召见下一个人。等所有的结果都处理完了,国王就继续睡觉去了。直接有新的仆人完成任务后过来找他。这就是国王的幸福生活。
功能:在事件循环的下一次循环中调用 callback 回调函数。效果是将一个函数推迟到代码书写的下一个同步方法执行完毕时或异步方法的事件回调函数开始执行时;与setTimeout(fn, 0) 函数的功能类似,但它的效率高多了。

基于node.js的事件循环分析,每一次循环就是一次tick,每一次tick时,v8引擎从事件队列中取出所有事件依次进行处理,如果遇到nextTick事件,则将其加入到事件队尾,等待下一次tick到来时执行;造成的结果是,nextTick事件被延迟执行;以下是nextTick源码

常用工具util

util.inherits(constructor,superConstructor)是一个实现对象间原型继承的函数。由于js的继承是面向原型的继承

var util=require('util');
function Base(){
    this.name="saa";
    this.age="18";
    this.sayHello=function(){
        console.log(this.name+this.age);
    }
}
Base.prototype.say=function(){
    console.log(this.name);
}
function sub(){
    this.name="sassasa";
}
util.inherits(sub,Base);
var ss=new sub();
var bb=new Base();
ss.say();  //sassasa
bb.say();  //saa
//如果有这句话会报错   因为sayHello这个函数是Base构造函数里边的而不是原型里边的不会被继承过来
//ss.sayHello();   

util.inspect(object,[showhidden],[depth])将任意的一个对象转换为字符串
showhidden 是否显示更多的隐藏信息
util.inspect值得注意的是 不会简单的将对象转化为字符串,即使该对象定义了toString方法

var util=require('util');
function person(){
    this.name="saas";
    this.toString=function(){
        return this.name;
    }
}
var obj=new person();
console.log(util.inspect(obj)+"x");  //会输出对象的信息x
console.log(obj+"x");   //saasx

事件驱动events

events是node.js最重要的模块,没有之一
events只提供了一个对象 EventEmitter events.EventEmitter这个对象就是事件发射和事件监听功能的封装。EventEmitter的每一个事件由事件名和若干个参数组成的
on注册 emit事件发生(注册到一个事件上的函数按照先注册就会先调用)

var Emitter=require("events").EventEmitter;
var event=new Emitter();
event.on("doSomethings",function(args1,args2){
    console.log(1,args1,args2);
})
event.on("doSomethings",function(args1,args2){
    console.log(2,args1,args2);
})
event.emit("doSomethings",'1','322');

会输出
1 1 322
2 1 322
event.on(eventName,function) 为指定的事件注册了一个监听器
event.emit(eventName,参数1,参数2) 让事件eventName发生,并给回调函数传递参数
event.once(eventName,function) 为指定的事件注册了一个单次监听器,触发一次后就会该监听器
event.removeListener(eventName,function) 移除指定的事件的监听器

fs文件操作模块

fs.readFile(“文件名字”,[encoding],function(err,data))

var fs=require('fs');
fs.readFile('test11.txt',function(err,data){
    if(err){
        console.log(err);
    }
    else{
        console.log(data);
    }
})

谁输出

var fs=require('fs');
fs.readFile('test11.txt','utf-8',function(err,data){
    if(err){
        console.log(err);
    }
    else{
        console.log(data);
    }
})

会输出真正的文本内容
fs.open(path,flags,[moedl],[callback])两个必选参数 path文件的路径 flags可以是以下的值
r:读取模式打开
r+:读写模式打开
w:写入模式打开,没有则创建
w+:读写模式打开没有则创建
a:以追加的模式打开 没有则创建
a+:以读取追加的模式打开 没有则创建

HTTP服务器和客户端

HTTP服务器
http。server是http模块中的http服务器对象

var http=require('http');
http.createServer(function(req,res){
     res.writeHeader(200,"text/html");
    res.write("<h1>ssasa</h1>")
    res.end("<h1>ssasa</h1>")
}).listen(3000);

http.createServer()创建了一个server实例
server实例的request事件 当客户端的请求到达的时候会触发这个事件

var http=require('http');
var server=new http.Server();
server.on('request',function(req,res){
    res.writeHeader(200,"text/html");
    res.write("<h1>dsds</h1>");
    res.end("<h1>dsds</h1>");
})
server.listen(3000);

获取get请求

var http=require('http');
var url=require('url');
var util=require('util');
var server=new http.Server();
server.on('request',function(req,res){
    res.writeHeader(200,"text/html");
    res.write("<h1>"+util.inspect(url.parse(req.url,true))+"</h1>");
    res.end("<h1>end</h1>");
})
server.listen(3000);

访问localhost:3000?name=“sasa”
就会在浏览器上输出一个对象,其中的query属性的值就是封装了?后面的内容
获取post请求

var http=require('http');
var querystring=require('querystring');
var util=require('util');
var server=new http.Server();
server.on('request',function(req,res){
    var post="";
    req.on('data',function(chunk){
        data+=chunk;
    })
    req.on('end',function(){
        res.writeHeader(200,"text/html");
        post=querystring.parse(post);
        res.write(util.inspect(post));
    })

})
server.listen(3000);

http.Server
HTTP客户端、
http模块提供了两个http.request和http.get作为客户端向HTTP,功能是作为客户端向HTTP服务器发起请求
http.request(options,callback)发起http请求

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值