当前位置: 首页 > 后端技术 > Node.js

Node.js学习笔记(三)

时间:2023-04-03 20:56:10 Node.js

globalJS浏览器中的全局对象就是window对象。在Node.js环境中,全局对象称为global。我们可以用它来区分当前的JavaScript执行环境:if(typeof(window)==='undefined'){console.log('node.js');}else{console.log('browser');}processprocess是Node.js提供的一个对象,代表当前的Node.js进程。JavaScript程序是由事件驱动的单线程模型,Node.js也不例外。Node.js继续执行响应事件的JavaScript函数,直到没有响应事件的函数可以执行,Node退出。nextTick方法该方法可以在下一个事件响应中执行代码。fs模块fs模块是Node.js的内置模块,负责读写文件。它提供异步和同步方法。异步与同步异步是指JS在进行IO操作时,不需要等待执行结果,而是在传入回调函数后,继续执行后面的代码。以jQuery的getJSON()为例:$.getJSON('http://example.com/ajax',function(data){console.log('IO结果返回后执行...');});console.log('不等待IO结果,直接执行后续代码');而同步是线性的,需要等待IO操作返回结果后再执行后续代码:vardata=getJSONSync('http://example.com/ajax');同步代码比较少,但实际用户体验上异步更好。异步读取文件下面是一个异步读取文本文件的例子:'usestrict';varfs=require('fs');fs.readFile('sample.txt','utf-8',function(err,data){if(err){console.log(err);}else{console.log(data)}})需要注意的是sample.txt必须在当前目录下,文件的编码格式是utf-8。如果我们想读取二进制文件怎么办?这是读取图像的示例:'usestrict';varfs=require('fs');fs.readFile('sample.png',function(err,data){if(err){console.log(错误);}else{console.log(data);console.log(data.length+'bytes');}});读取二进制文件时,当没有传入文件编码(如utf-8)时,data会返回一个Buffer对象。这里提到了Buffer对象。是Node处理二进制数据的接口,也是Node原生的全局对象。可以不用require('buffer')直接使用。它就像一个数组。同步读取文件与异步读取文件相比,同步读取文件只是在readFile中增加了一个sync,看下面的例子:'usestrict'varfs=require('fs');try{vardata=fs.readFileSync('sample.txt','utf-8');console.log(data);}catch(err){//错误信息}如果出现错误,只能通过try...catch捕获。写文件是通过fs.writeFile()实现的。'使用严格'varfs=require('fs');vardata='你好Node.js!';fs.writeFile('output.txt',data,function(err){if(err){console.log(err);}else{console.log('ok');}});和读取文件类似,writeFile()也有一个同步方法writeFileSync()。'使用严格';varfs=require('fs');vardata='helloNode.js';fs.writeFileSync('output.txtx',data);stat可以通过fs.stat()获取文件大小、创建时间等信息。它将返回一个stat对象,告诉我们文件的详细信息。'usestrict';varfs=require('fs');fs.stat('sample.txt',function(err,stat){if(err){console.log(err);}else{//是否是否为文件:console.log('isFile:'+stat.isFile());//是否为目录:console.log('isDirectory:'+stat.isDirectory());if(stat.isFile()){//文件大小:console.log('size:'+stat.size);//创建时间,Date对象:console.log('birthtime:'+stat.birthtime);//修改时间,日期对象:console.log('修改时间:'+stat.mtime);}}});同样,它也有一个同步函数statSync()。'使用严格';varfs=require('fs');varstats=fs.statSync('sample.txt');console.log(stats.isFile());//真的