特点:
(1)前后端都用js编写容易实现全栈
(2)非阻塞 i/o (最重要)
(3)完善的生态
(4)使用v8引擎
劣势:nodejs不适合计算密集型程序,只适合 i/o 密集型程序
运行node:(1)进入到当前文件所在路径
(2)运行node必须使用命令行,node+文件名字运行
异步:代码不是一行一行执行的
回调:当做完一件事的时候,马上反馈这件事
相对路径:“.”或者“无”开头的就是相对路径
js创建对象:(1){a:1}
(2)var obj = new Object();
(3)function bar(){
this.a = 3;
}
全局对象:可以直接调用的对象我们称之为全局对象
1.console:可以调用log这个方法
2.setTimeout:超时调用
3.setInterval:间歇调用
4._ _dirname:当前文件所在路径
5._ _filename:当前文件的路径包括文件名
6.require:require的参数就是exports曝光文件的相对路径 require('./index.js');
7.exports:曝光,曝光后的变量别的文件就可以使用require引用
使用exports曝光变量必须加上属性,属性名可以自拟,然后可以曝光给其他文件,对象的键是属性名,值是曝光变量的值
(1)曝光变量(2)曝光对象(3)曝光方法(4)曝光构造函数
(5)曝光工厂函数:使用new Object创建对象,返回值,返回的是创建的对象
8.module:module和exports一起使用,exports可以作为module的属性
可以不添加属性,使用require引用
(1)pwd:显示当前路径 (2)cd:切换 (3)ls:展示下级所有
OS——官方为我们提供的文件 operation system操作系统
(1)使用官方为我们提供的js文件,需省略‘.js’后缀。
(2)不能以‘.’开头,如果引用自己定义的文件,路径必须以‘.’开头。
OS的作用:
node.js官方为我们提供有助于编程的文件,叫核心模块,都可以用require引用
(1)打印操作系统,查看当前node.js运行的平台是什么操作系统
console.log(os.platform());
(2)cpus:打印cpu参数和cpu核数
(3)hostname:打印主机名称
(4)arch打印cpu架构
核心模块!
1.process — 进程:一个程序运行起来就是进程,有进程就有进程号
可以通过pid查看当前node运行的进程号
2.util — untility(工具)
可以格式化我们的字符串
(1)format:%d表示数字 %s表示字符串
(2)util:可以查看属性和方法明细,通过inspect。
(3)depth:打印到第几层 console.log(util.inspect(util,{depth:1 } ) );
3.path — 用来操作路径
1.parse 解析路径
(1)root:根目录
(2)dir:当前文件所在的目录
(3)base:当前文件的带有扩展名的文件名
(4)ext:扩展名
(5)name:文件名
2.join 合并路径
join里面的参数可以是路径和文件的名字
3.isAbsolute是否绝对路径
它的返回值是布尔值,如果true为绝对路径,否则为相对路径
4.extname — 得到文件的扩展名
4.events — 引用时间模块后,需创建监听发射事件的对象
使用事件需要映入时间模块events,必须加s
使用事件必须创建EventEmitter这个对象,这里的Event没有s,第一个字母大写
var em = new event.EventEmitter;
(1)on 监听事件方法
(2)emit 用来触发事件
(3)once 只监听一次
5.Buffer
①就是缓存,存数据,存比较大的数据
②存放的为二进制的数据
③Buffer的数据存在主机内存中,内存多大可以存多大
创建Buffer
1.使用new创建 var buf = new Buffer();
①Buffer也是一个全局对象
②Buffer第一个字母大写
③Buffer括号中的内容为Buffer的大小,单位字节
2.使用字符串创建
var buf = new Buffer(‘hello’);
console.log(buf.toString());
toString();可以把它打印成字符串
3.使用数组创建
var buf = new Buffer([1,3]);
6.流(stream)
在计算机中任何数据传输都是通过流
在node.js中流是一个 抽象的接口,用来传输010101(二进制),其实就是数据
在nide.js中流这个抽象的接口出去的就是数据流
在node.js中流(stream)也是核心模块
可以把stream看成Event.Emitter的子类
因为require('stream')曝光的是构造方法,所以需要new创建对象
流的方向:在node.js中流是有方向的是相对于cpu分为读流和写流
创建读流:Readable
创建写流:Writable
创建读写流:Duplex
总结:
流是一个抽象的接口,包括读流写流和读写流在node.js中流不是字节流node.js中基本上不会自己创建流,都是使用其它模块为我们创建好的流
小结总结:
核心模块:os process path events util stream
全局对象:console __dirname __filename setTimeout setIntval module exports require
7.文件模块(fs【file system】)
文件模块是任何语言都很重要的模块
在计算机中除了文件夹都是文件,在linux中,只有文件
fs模块对文件的操作主要就是增删改查
在node.js中任何对文件的操作都分为同步异步
①异步读取文件 readFile()
第一个参数文件路径,第二个参数是回调,注意在回调函数中有两个参数,第一个是error,第二个是独到的数据
fs会把文件读取到Buffer中
因为你引入fs这个模块所以readFile()这个官方的方法已经写好了,作用就是读取完的数据会自动放到回调函数的data中如果有错误会通过error报出
②同步读取文件 readFileSync()
一个参数及文件路径
③异步写文件 writeFile()
第一个参数要写入文件的路径,第二个写入文件的内容,第三个回调函数,回调参数只有一个参数就是error
④同步写文件 writeFileSync()
第一个参数路径,第二个参数要写的内容
⑤异步追加文件内容 appendFile()
第一个参数路径,第二个参数内容,第三个参数回调,回调参数是error
⑥同步追加文件内容 appendFileSync()
第一个参数路径,第二个参数是追加的内容
⑦异步改变文件名 rename()
第一个参数是老名字,第二个参数是新名字,第三个参数是回调函数返回error
⑧同步改变文件名renameSync()
第一个参数是老名字,第二个参数是新名字
8.文件和流
一、使用流读取文件 createReadStream()
一个参数要读文件的路径
注意:该方法返回的是一个读流
因为读流是继承EventEmitter所以读流on和emit事件
①使用读流获取数据需要用on且第一个参数为'data',不用emit触发该事件,第二个参数是一个回调函数且有一个参数则该参数是被读文件的内容
没通过emit触发事件却调用了函数是因为使用的fs.createReadStream创建的流这个方法是官方定义的,所以当读流的时候就可以自动触发'data'事件,当检测文件有数据的时候回调函数的参数就是我们读取的文件的内容
②可以通过给createStream()添加选项来指定我们读取字节的个数,选项是第二个参数,是一个js对象{start:起始位置,end:结束位置}
③还可以通过'end'事件来额外操作,该事件是在读取完文档后触发,所以之前必须有'data'事件
总结:说明读流会自动触发两个事件'data'和'end'
二、使用流写文件 createWriteStream()
注意:该方法返回的是一个写流
写流通过write方法写入内容,方法的参数就是写入的内容
写流通过end方法告诉文件所有内容写入完毕
注意不能在end方法后使用write方法会出错
全总结:读流两事件,写流两方法
readFile和createReadStream的区别
文件是当前所有内容读取完后操作
流是对文件中的字节操作
比如:在流中专门提供了{start:"起始位置",end:"结束位置"}的方法对文件内容进行边读边截取
但是在文件中需要先把文件内容全部获取然后在通过字符串的方法进行截取
服务器端:
① 引入模块
②创建服务器端对象
createServer()
③监听
listen()
一个参数:端口号
④使用connection事件
只要客户端连接就会触发这个事件
⑤将客户端的client对象返回到createServer的参数中
⑥client是继承流的所以可以读流,可以使用'data'事件
客户端:
①引入模块
②创建连接对象 createConnection()
两个参数,第一个是要连接的端口的端口号,第二个是要连接的主机的ip地址(本机:127.0.0.1或者localhost)
③使用connect事件
④client是继承流的所以可以写流,可以使用write方法书写文本
10、readline 逐行读取
获取当前输入的内容,需要进程模块辅助创建readline对象
var rd=new readline.createInterface({input:p.stdin,output:p.stdout})
监听line事件,该事件是当接收到回车时触发
11、url 网址 统一资源定位符 (unit resouny location)
①url.parse() 打印网址的详细信息(参数是网址)
12、querystring 查询字符串
①qs.parse() 用来将a=b这种格式解析成{a:b}
13、http (超文本传输协议:hyper text transfer protocal)
①引入http模块
②创建http对象
createServer()
③监听端口
listen()
④请求时要执行的部分
在createServer中加上回调函数,这个回调函数就是我所要执行的任务,createServer的作用就是当有请求 的时候,执行function这里面的代码。
回调函数有两个参数都是对象
①req(request)用来请求对象 继承读流
1.url 表示请求的url地址
2.method 请求方法(post,get,pnt,delete,update,Head~~~)
②res(response)表示响应对象 继承写流
可以通过fs模块引入html模块输入到网页中
node js还有很多外部模块后面会更新