前端珍藏学习-nodejs_第1页
前端珍藏学习-nodejs_第2页
前端珍藏学习-nodejs_第3页
前端珍藏学习-nodejs_第4页
前端珍藏学习-nodejs_第5页
已阅读5页,还剩584页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

全局对象控制台Console定时器TimeoutImmediate模块

总的来说

器ErrorSyntaxError类RangeError类TypeError类流查询字符串(Query

字符串(String系统进程子进程(Child路径文件系统(FileBuffer加密类ECDHSign压缩解压(ZLIB)网络服务服务

()逐 逐

Interface类

命令行选项(CommandLine

虚拟机 集群 域域) 类类 警告:不要忽视错误 断言测试(Assertion 实用工具 Punycode码 C/C++插件(C/C++ oo NodejsAPI中文这份文档的翻译工作始于2016年4月初,由于翻译量较大,加之Node.js版本更新较Gitbook版(国内镜像Gitbook版JSON格式输出 IDE

格式的文档请转 文档查阅,译在整个文档中,你可能会看到某个部分的稳定性提示。Node.jsAPI仍然会有一些小的变依赖的API几乎是不会改变的。也有一些是新增和实验性的,或已知具有性并在重新设稳定度:0已废弃稳定度:1稳定度:2-稳定稳定度:3 JSON稳定度:1该特性是在Node.jsv0.6.12中引入的,目前仍是实验性功能。注函数只是简单的包装了系统调用,就像文档中的fs.open()。该文档到相应的手册页警告:一些系统调用,例如lchown(2),是特定于BSD系统。这就意味着 用于MacOSX和其他的BSD派生系统,在Linux上是不可用的。Windows环境下的大多数系统回调和Unix环境下的等效,但有一些可能与LinuxMACOSX不同。以一种微妙的关系为例,WindowsUnix系统回调的替代方案,详见Nodeissue4760。node[options][v8options][script.js|-e"script"]有关使用Node.js运行的各种选项和方法的相关信息,请参阅文档中令行选项章 constconsthttp=consthostname='';constport=3000;constserver=http.createServer((req,res){res.statusCode=200;res.setHeader('Content-Type','text/plain'); oWorld\n');server.listen(port,hostname,()=>console.log(`Serverrunningat$node$nodeexample.jsServerrunning

全局对象全局对象 Buffer类setInterval(callback,delay[,...args])setImmediate(callback[,...args])Buffer当前执 名称 中运行nodeexample.jsconsoleconsole.log(打印bbabbaaa

的依赖文件

指代用 中运行nodeexample.jsconsoleconsole.log(打印

指代用 ,在实际应用中请使用自己 }varvar 将会一个全局变量。在Node.jsvarvar

时将重新稳定度:0-已废弃 方法如何处理特定的文件扩展名

requirerequire.extensions['.sjs']=废 之前,该列表用于将通过按需编译的非JavaScript模块加载到Node.js中。然而废Node.js程序来加载模块,或预先将它们编译成JavaScript代码。

setTimeout(callback,delay[,setInterval(callback,delay[,setImmediate(callback[,控制台Console稳定度:2

。由于该对象是一个全局 的情况下使用 o//在stdout中打印 o o%s',//在stdout中打印 oconsole.error(newError('Whoops,somethingbad在stderr中打印[ErrorWhoopssomethingbadconstname='WillRobinson';console.warn(`Danger${name}!Danger!`);在stderr中打印DangerWillRobinson! constconstout=getStreamSomehow();consterr=constmyConsole=newconsole.Console(out, o//在stdout中打印: oworld o%s','world');//在stdout中打印 omyConsole.error(newError('Whoops,somethingbad在stderr中打印[ErrorWhoopssomethingbadconstname='WillRobinson';myConsole.warn(`Danger${name}!Danger!`);在stderr中打印DangerWillRobinson! ConsolenewConsole(stdout[,stderr])console.log([data][,...args])console.warn([data][,...args])console.dir(obj[,options])console.trace(message[,...args])console.assert(value[,message][,...args])或console.Console:constconstConsole=require('console').Console;constConsole=console.Console;newConsole(stdout[,

constconstoutput=fs.createWriteStream('./stdout.log');consterrorOutput=fs.createWriteStream('./stderr.log');constlogger=newConsole(output,像consolevarcount=5;logger.log('count:%d',在stdout.log中打印count

newnewConsole(process.stdout,console.log([data][,

中的替换值(util.format进行处理)varvarcount=5;console.log('count:%d',count);在stdout中打印count:console.log('count:',在stdout中打印count:如果在第一个字符串中没有找到格式化元素(如,d),util.inspect()会在每个参数上调用并将结果字符串值拼在一起。详见util.format()。([data][,console.error([data][,

中的替换值(util.format进行处理)constconstcode=5;console.error('error#%d',code);在stderr中打印errorconsole.error('error',在stderr中打印error如果在第一个字符串中没有找到格式化元素(如,d),util.inspect()会在每个参数上调用并将结果字符串值拼在一起。详见util.format()。console.warn([data][,console.dir(obj[,

默认为false。

22

console.trace(message[,

'Trace'Traceconsoleconsole.trace('Show//Prints:(stacktracewillvarybasedonwheretraceisTrace:Showmeatrepl:2:9atREPLServer.defaultEvalatboundatREPLServer.runBound[aseval]atREPLServer.<anonymous>(repl.js:412:12)atemitOne(events.js:82:20)atREPLServer.emitatREPLServer.Interface._onLine(readline.js:210:10)atREPLServer.Interface._line(readline.js:549:8)atREPLServer.Interface._ttyWriteconsole.assert(value[,message][,

util.formatconsoleconsole.assert(true,'does//console.assert(false,'Whoops%s','didn\'t//AssertionError:Whoopsdidn't

特别是在浏览器中调用断言后

但不会中断后续代码的执行。而在Node.js中,一个断言将导致抛出一个

'use用一种'use用一种新的没有采用猴子补丁实现的assert来创建一个简单的consoleconstmyConsoleObject.setPrototypeOf({assert(assertion,message,...args){tryconsole.assert(assertion,message,}catch{}}},module.exports=

constconstconsole=console.assert(false,'thismessagewillprint,butnoerrorthrown');console.log('thiswillalsoprint'); 标识。当调

。定时器持续时间精确到亚毫秒 for(vari=0;i<100;i++){;}console.timeEnd('100-打印100-elements

MACOSX中极小的(1kb)MACOS

定时器定时器Timeout类Immediate类稳定度:3

APINode.js事件循环构建的不同内部实现。setInterval(callback,delay[,...args])setImmediate(callback[,...args])被调用,取决于用来创建定时器的方法以及Node.js事件循环是否正在做其他工作。setTimeout(callback,delay[,}

毫秒被调用。Node.js

时,delay会被设置 11 不是一个函数,将会抛出一个TypeError11setInterval(callback,delay[,}

时,delay会被设置 11 不是一个函数,将会抛出一个TypeError11setImmediate(callback[,}

当多次调 }

})

)

Timeout)setTimeoutsetInterval()

函数

Node.js这类定时器可能会对Node.js应用程序的性能产生影响

ImmediateImmediate模块总的来说稳定度:3视为一个单独的模块)

constconstcircle=console.log(`Theareaofacircleofradius4is的内容constconstPI=exports.area=(r)=>PI*r*r;exports.circumference=(r)=>2*PI*r; 两个函数。为了将函数和对象添加进 对象下 私有的

constconstsquare=require('./square.js');varmySquare=square(2);console.log(`Theareaofmysquareis 赋值给exports将不会修改模块module.exportsmodule.exports=(width)=>{returnarea:()=>width*} exportsmodule对

对 到

{Object}Module对象module.exports

上 constconstEventEmitter=require('events');module.exports=newEventEmitter();//处理一些工作,并在一段时间后从模块自身内部发出'ready'{},constconsta=require('./a');a.on('ready',()=>{console.log('moduleaissetTimeout(()=>{module.exportssetTimeout(()=>{module.exports={a:'},o'constxconstx=require('./x');

的。对于任何变量 functionfunctionrequire(...)//((module,exports)=>//export,exportmodule.exportsexports=module.exports=})(module,return} 用module.exports。

id}

模块定义在Node.js源代码 下

的拓展名进行查找 加载的编译后的插件模块

的((function(exports,require,module,filename,dirname)//你的模块代码实际上应该在

、const

对象从模块中导出值 包含了模块的文件名 作为参数 的文件示例{{"name":"some-library","main":"./lib/some-library.js"}

./some-./some-library/lib/some-./some-./some-library/lib/some-

require('./some-require('./some-

条目指定的文件丢失,Node.js将无法解析该模块,ErrorError:Cannotfindmodule'some-

下require('./some- require('./some-

./some-./some-node_modules 头,那么Node.js会从当前模块的

example-如,require('example-module/path/to/file')example-path/to/file

Node.js将会从这些路径中搜索。(Windows操作系统中,

是用户的

时,模块可能在未完成执行时被返回a.jsconsoleconsole.log('astarting');exports.done=false;constb=require('./b.js');console.log('ina,b.done=%j',b.done);exports.done=true;console.log('ab.jsconsoleconsole.log('bstarting');exports.done=false;consta=require('./a.js');console.log('inb,a.done=%j',a.done);exports.done=true;console.log('b:consoleconsole.log('mainstarting');consta=require('./a.js');constb=require('./b.js');console.log('inmain,a.done=%j,b.done=%j',a.done,

$$nodemain.jsmainstartinginb,a.done=falsebdoneina,b.done=trueadoneinmain,a.done=true,

可以返回“部分完成”的对象,从而允许传递依赖性加载模块缓存的的文件名(比如 如:require('./foo')和

Node.js直接运行一个文件时,require.main就被设置为它的

requirerequire.main===node node

来获取当前应用程序的点总的来说

require(X)require(X)frommoduleatpathIfXisacorereturnthecoreIfXbeginswith'./'or'/'orLOAD_AS_FILE(Y+LOAD_AS_DIRECTORY(Y+LOAD_NODE_MODULES(X,THROW"notIfXisafile,loadXasJavaScripttext.IfX.jsisafile,loadX.jsasJavaScripttext.IfX.jsonisafile,parseX.jsontoaJavaScriptObject.IfX.nodeisafile,loadX.nodeasbinaryaddon.IfX/package.jsonisaParseX/package.json,andlookfor"main"letM=X+(jsonmainIfX/index.jsisafile,loadX/index.jsasJavaScripttext.IfX/index.jsonisafile,parseX/index.jsontoaJavaScriptobject.IfX/index.nodeisafile,loadX/index.nodeasbinaryaddon.LOAD_NODE_MODULES(X,letforeachDIRinletPARTS=pathletI=countofPARTS-letDIRS=whileI>=ifPARTS[I]="node_modules"DIR=pathjoin(PARTS[0..I]+DIRS=DIRS+letI=I-returnNode.js

函数的语义被设计的足够通用化,可以支持支持许多合理 、rpmnpm)Node.js接下 /usr/lib/node/<some-package>/<some-/usr/lib/node/<some-package>/<some-

包 包也可 1.2.3

中,而是将

中查找了

获得的是基于真实路径的文件,因此包本身可以放在任何位置事件事件绑定事件稳定度:2

传递给大多数Node.jsAPI都是采用惯用的异步事件驱动架构,其中某些类型的对象(称为“触例如:net.Server对象会在每次有新连接时发出事件;fs.readStream对象会在文件被打开时发出事件;stream对象在每当在数据可读时发出事件。 函数,它允许将一个或多个函数附加到由该对象发出名事件上。通常) 发出事件,所有附加到特定事件上的函数都被同步调用。所有由器 实例 用器 用于触发事件constconstEventEmitter=classMyEmitterextendsEventEmitterconstmyEmitter=newMyEmitter();myEmitter.on('event',()=>{console.log('发生了一个事件EventEmitter'newListener'事件'removeListener'事件EventEmitter.listenerCount(emittereventName已废弃emitter.on(eventName,listener)emitter.once(eventName,listener)emitter.addListener(eventName,listener)emitter.prependListener(eventName,listener)emitter.prependOnceListener(eventName,listener)emitter.removeListener(eventName,listener)emitter.emit(eventName[,...args]) constconstEventEmitter= 事件;在一个器被 事件'newListener{String}|{Symbol}要的事件名{Function 事件的器将被传递事件名称并添加一个器的 回调constconstmyEmitter=new//只进行一次,所以不myEmitter.once('newListener',(event,listener){if(event==='event') 面插入新 myEmitter.on('event',()=>}myEmitter.on('event',()=> 'removeListener{String|{Symbol{Function事件在器被移除后发出任何单一事件默认都可以最多10个器。可以使用emitter.setMaxListeners(n)方

)。请注意,这不是一个硬性限制。EventEmitter实例允许添加的器,但会

possibleEventEmitterpossibleEventEmittermemoryemitter.setMaxListeners(emitter.getMaxListeners()emitter.setMaxListeners(emitter.getMaxListeners()+1);emitter.once('event',()=>{emitter.setMaxListeners(Math.max(emitter.getMaxListeners()-1, 属性,分别代表事件发生器的,事件的名称和附加的器的数量。它 属性 添加:v0.9.12

的器数量的类方法constconstmyEmitter=newMyEmitter();myEmitter.on('event',()=>{});myEmitter.on('event',()=>{});console.log(EventEmitter.listenerCount(myEmitter,'event'));emitter.on(eventName,{String|{Symbol{Function

server.on(server.on('connection',(stream){console.log(' 的以便链式调用默认情况下,事件器按照添加的顺序依次调用 方法可以 数组开头的可选方法constconstmyEE=newEventEmitter();myEE.on('foo',()=>console.log('a'));myEE.prependListener('foo',()=>console.log('b')); emitter.once(eventName,{String|{Symbol{Function

事server.once(server.once('connection',(stream){console.log(' 的以便链式调用默认情况下,事件器按照添加的顺序依次调用 方法 数组开头的可选方法constconstmyEE=newEventEmitter();myEE.on('foo',()=>console.log('a'));myEE.prependOnceListener('foo',()=>console.log('b')); emitter.addListener(eventName,emitter.prependListener(eventName,{String|{Symbol{Function

server.prependListener(server.prependListener('connection',(stream){console.log(' 的以便链式调用{String|{Symbol{Function

事件的

事件时,此器将被移除,并在随后调用server.prependOnceListener(server.prependOnceListener('connection',(stream){console.log('哈,我们有第一个用户 的以便链式调用emitter.removeListener(eventName, constconstcallback=(stream){console.log('有人连接server.on('connection',//server.removeListener('connection',最多只会从当前的器数组里移除一个器实例。如果任何单一的

在调用触发后和最后一个器执行完毕前不 过程中移除它们。随后的事件会像预期的那样发生constconstmyEmitter=newconstcallbackA=(){console.log('A');myEmitter.removeListener('event',callbackB);constcallbackB=(){myEmitter.on('event',callbackA);myEmitter.on('event',//在callbackA中移 器callbackB,但它仍然会被调//内部 器数组此时触发[callbackA,callbackB] callbackB现在//内部 器数组为[callbackA] 因为器是使用内部数组进行管理的,所以调用它将改变在器被移除后的任何监 的以便链式调用 的器 实例 的以便链式调用emitter.emit(eventName[,按照器的顺序同步调用每个以

的器,并将额外的参数传递给 的事件的器数组的副本server.on(server.on('connection',(stream){console.log('有人连接打印:[Function]{String|{Symbol 的事件

个。emitter.setMaxListeners()方法允许修改特定的

0 ( )0

事件触发时,将抛这个错误,打印堆栈,并退出Node.js进程constconstmyEmitter=newMyEmitter();myEmitter.emit('error',newError('whoops!'));Node.js抛出错误域()模块(请注意, constconstmyEmitter=newprocess.on('uncaughtException',(err){console.log('哇哦!这儿有个错误myEmitter.emit('error',new//打印:哇哦!这儿有个错 事 器constconstmyEmitter=newMyEmitter();myEmitter.on('error',(err)=>{console.log('哇哦!这儿有个错误myEmitter.emit('error',new//打印:哇哦!这儿有个错绑定事

方 器时,这个器会在每次发出该命名事件时被constconstmyEmitter=newMyEmitter();letm=0;myEmitter.on('event',(){//打印:1 方法时,可以对于特定事件最多调用一次的器。一constconstmyEmitter=newMyEmitter();letm=0;myEmitter.once('event',()=>{//打印:1忽给器传

实例的。

会被刻意得设置成指向附加到constconstmyEmitter=newMyEmitter();myEmitter.on('event',function(a,b){console.log(a,b, abMyEmitter : _events:{event:[Function] _eventsCount: _maxListeners:undefinedmyEmitter.emit('event','a',也可以使用ES6的箭头函数作为器。然而,当你这么做时,

constconstmyEmitter=newMyEmitter();myEmitter.on('event',(a,b)=>{console.log(a,b,打印:abmyEmitter.emit('event','a',会按照器的顺序同步地调用所有器。这对于确保事件的正确排序很重要以避免竞争条件或逻辑错误。在适当的时候,器函数也可以通过使用 constconstmyEmitter=newMyEmitter();myEmitter.on('event',(a,b)=>{setImmediate(()myEmitter.emit('event','a',错误错误Error类SyntaxError类ReferenceError类RangeError类TypeError类标准的JavaScript错误:

SyntaxError:当响应错误的JavaScript语法时抛出。TypeError:当传递错误类型的参数时抛出。URIError:当一个全局的URI处理函数被误用时抛出。

newError(message)JavaScriptError对象不会表述错误发生的具体原因。Error

对象在代码中的位置的“堆栈”,并可能提供对此错误的文 new

在代码中的位置。堆栈是根据V8的堆栈API生成的。堆栈只会(a)异步代码开始执行前或(b)Error.stackTraceLimit属性给出的栈帧中的最小项

constconstmyObject={};myObject.stack//similarto`newErrorType: ErrorType: functionfunction{Error.captureStackTrace(this,}//WithoutpassingMyErrortocaptureStackTrace,the//framewouldshouldupinthe.stackproperty.by//theconstructor,weomitthatframeandallframesaboveit.newMyError().stack

产生的)

new new

constconsterr=newError('Themessage');//Prints:The Error:Error:Thingskeephappening!at/home/gbusey/file.js:525:2atFrobnicator.refrobulate(/home/gbusey/business-logic.js:424:21)atActor.<anonymous>(/home/gbusey/actors.js:400:8)atincreaseSynergy<errorclassname>:<errorclassname>:<error一行都会以at"开头)8显示每个函数的名称(),8constcheetahify=constcheetahify=require('./native-functionmakeFaster()//cheetahify*synchronously*callsspeedy.cheetahify(functionspeedy(){thrownewError('oh}makeFaster();//will// thrownewError('oh //Error:ohatspeedyatmakeFasteratObject.<anonymous>pileatObject.Module._extensions..js(module.js:474:10)atModule.load(module.js:356:32)atFunction.Module._load(module.js:312:12)atFunction.Module.runMain(module.js:497:10)atstartup(node.js:119:16)at

C

V8引擎内部(比如,forEach)plain-plain-/absolute/path/to/file.js:line:column,如果栈帧产生自用户程序或其依赖代表堆栈的字符串是在属性时才被生成的

实例产生,详见此处SyntaxError

、Function、requirevmtrytryrequire('vm').runInThisContext('binary!}catch(err)//errwillbea}ReferenceError 的一个子类用以表示企图一个未定义的变量。这些错误通常表示代码中的错字或一个坏掉的程序。虽然客户端代码可能会产生和这些错误,但在实践中,只有V8引//throwsReferenceError,doesNotExistisnotavariableinthis

属性,其值为一个只有单个元素(constconstassert=require('assert');try{}catch(err)assert(err.arguments[0],}

RangeError 论这是一个数字范围还是给定函数参数的选项之外的设置(原文,whetherthatisanumericrangeoroutsidethesetofoptionsforagivenfunctionparameter。理解了半天也没搞明白这requirerequire('net').connect(-//throwsRangeError,portshouldbe>0&&<

TypeError requirerequire('url').parse(function()//throwsTypeError,sinceitexpecteda

API所有的JavaScript错误都是作为异常处理的,立即产生并通过标准的JavaScript 抛出错误。这些都是利用JavaScript语言提供的try/catchconstruct处理的。////ThrowswithaReferenceErrorbecausezisundefinedtry{constm=1;constn=m+z;}catch(err)//Handletheerror}JavaScript

try/try/

constconstfs=fs.readFile('afilethatdoesnotexist',(err,data){if(err)console.error('Therewasanerrorreadingthefile!',err);}//Otherwisehandlethe constconstnet=constconnection=//Addingan'error'eventhandlertoastream:connection.on('error',(err)=>{//Iftheconnectionisresetbytheserver,orifit//connectatall,oronanysortoferrorencountered//theconnection,theerrorwillbesenthere.Node.jsAPI

机制错误,必须try/try/stream-basedeventemitter-basedAPI

将被抛出,从而导致Node.js进程报告一个未处理的异常并随即,除非适当的使用域模块或已经了process.on('uncaughtException')事件。constconstEventEmitter=require('events');constee=newEventEmitter();setImmediate(()=>//Thiswillcrashtheprocessbecauseno'error'//handlerhasbeenee.emit('error',newError('Thiswilltry/try/Node.js大多数由Node.jsAPI出来的异步方法都遵循称之为“Node.js风格的回调”的惯用式。通过这种模式,可以用作为参数的方法传递函数。当操作完成或错误时 传递constconstfs=functionnodeStyleCallback(err,{if(err)console.error('Therewasanerror',err);}}fs.readFile('/some/file/that/does-not-exist',nodeStyleCallback);fs.readFile('/some/file/that/does-exist',nodeStyleCallback)try/JavaScript try/////THISWILLNOTconstfs=tryfs.readFile('/some/file/that/does-not-exist',(err,data)=>//mistakenassumption:throwinghere...if(err){throw}}catch(err)//Thiswillnotcatchthethrow!}try{try{}catch(err){

数中的错误会引起Node.js进程。如果域被启用,或已process.on('uncaughtException')事件,那么这样的错误是可以被的

man3man2man3man2

是可行的

SystemErrormanman2E E

通用的系统 ( (地址已被使用):试图给一个服务器(net、httphttps)绑定本地地址ECONNREFUSED(连接被):目标机器积极导致的无法连接。这通常是试图连接

套接字(socket)丢失的结果。在httpnet模块中经常会碰到。(是一 ulimit-nulimit-n(无此文件 )(不是一 非空):一个需要

、socketFIFOnet

调试器稳定度:2Node.js包含一个可以有效地通过TCP协议的完整的进程外的全功能调试工具并内置试客户端。在启动Node.js后,通过

参数加上需要调试的文件路径的方式使用$$nodedebug<debuggerlisteningonport5858connecting...okbreakin1x=setTimeout(()=> 是这么写的x=5;{debugger;}, //myscript.jsx=5;{debugger;}, Oncethedebuggerisrun,abreakpointwilloccuratline$nodedebug<debuggerlisteningonport5858connecting...okbreakin1x=2setTimeout(()=> debug>cont breakin1x=setTimeout(()=>5},debug>breakinsetTimeout(()=>5},6console.log(' debug>replPressCtrl+Ctoleavedebug4debug><breakin5},6 7debug>

来移除一个监视器步进断点步,c,n,s,o暂停执行代码(类似开发者工具中的暂停按钮断setBreakpoint,sbsetBreakpoint(line,sb(linesetBreakpoint('fn()') setBreakpoint('script.js',,sb(.script.jssetBreakpoint('script.js',clearBreakpoint('script.js',,cbscript.js第一行的断点clearBreakpoint('script.js',$$./nodedebugtest/fixtures/break-in-<debuggerlisteningonport5858connectingtoport5858...okbreakintest/fixtures/break-in-1varmod=2 3 debug>setBreakpoint('mod.js',Warning:script'mod.js'wasnotloaded1varmod=2 3mod. debug>cbreakintest/fixtures/break-in-module/mod.js:2322 o=()=>24returnofrom信 -列出所有监视器和它们的值(每个断点会自动列出execexec执行-运行(调试器开始时自动运行杂

----

或这个正在的调试器的nodedebugnodedebug-p

nodedebugnodedebug稳定度:2随着ECMAScript2015(ES6)推出 ,JavaScript语言已经没有机制用于取或二进制数据流了。Buffer类被采纳为Node.jsAPI的一部分使得在TCP流和文

API

点。Buffer的大小在创建时被确定,且不能调整大小。require('buffer')constconstbuf1=//Createsazero-filledBufferoflengthconstbuf2=Buffer.alloc(10,//CreatesaBufferoflength10,filledwithconstbuf3=//Createsanuninitializedbufferoflength//ThisisfasterthancallingBuffer.alloc()butthe//Bufferinstancemightcontainolddatathatneedsto//overwrittenusingeitherfill()orconstbuf4=Buffer.from([1,2,//CreatesaBuffercontaining[01,02,constbuf5=//CreatesaBuffercontainingASCIIbytes[74,65,73,constbuf6=Buffer.from('tést',//CreatesaBuffercontainingUTF8bytes[74,c3,a9,73,{Number}

newBuffer(size)newBuffer(array)newnewBuffer(arrayBuffer[,byteOffset[,length]])newBuffer(str[,encoding]) ength(string[,encoding])Buffer.from(str[,encoding])Buffer.concat(list[,totalLength])pare(buf1,[buf.fill(value[,offset[,end]],encoding])buf.indexOf(value[,byteOffset][,encoding])buf.copy(targetBuffer[,targetStart[,sourceStart[,sourceEnd]]])buf.readIntBE(offset,byength[,noAssert])buf.readIntLE(offset,byength[,noAssert])buf.readFloatBE(offset[,noAssert])buf.readFloatLE(offset[,noAssert])buf.readDoubleBE(offset[,noAssert])buf.readDoubleLE(offset[,noAssert])buf.readInt8(offset[,noAssert])buf.readInt16BE(offset[,noAssert])buf.readInt16LE(offset[,noAssert])buf.readInt32BE(offset[,noAssert])buf.readInt32LE(offset[,noAssert])buf.readUIntBE(offset,byength[,noAssert])buf.readUIntLE(offset,byength[,noAssert])buf.readUInt8(offset[,noAssert])buf.readUInt16BE(offset[,noAssert])buf.readUInt16LE(offset[,noAssert])buf.readUInt32BE(offset[,noAssert])buf.readUInt32LE(offset[,noAssert])[buf.write(string[,offset[,length]],encoding])buf.writeIntBE(value,offset,byength[,noAssert])buf.writeIntLE(value,offset,byength[,noAssert])buf.writeFloatBE(value,offset[,noAssert])buf.writeFloatLE(value,offset[,noAssert])buf.writeDoubleBE(value,offset[,noAssert])buf.writeDoubleLE(value,offset[,noAssert])buf.writeInt8(value,offset[,noAssert])buf.writeInt16BE(value,offset[,noAssert])buf.writeInt16LE(value,offset[,noAssert])buf.writeInt32BE(value,offset[,noAssert])buf.writeInt32LE(value,offset[,noAssert])buf.writeUIntBE(value,offset,byength[,noAssert])buf.writeUIntLE(value,offset,byength[,noAssert])buf.writeUInt8(value,offset[,noAssert])buf.writeUInt16BE(value,offset[,noAssert])buf.writeUInt16LE(value,offset[,noAssert])buf.writeUInt32BE(value,offset[,noAssert])buf.writeUInt32LE(value,offset[,noAssert])newsize

(2^31)-1)的值length)Buffer

,以这种方式创建的Buffer实例的底层内存是没被初始化过的。新创constbuf=constbuf=newBuffer(5);//<Buffer78e08202//(octetswillbedifferent,everytime)//<Buffer00000000new

array

constconstbuf=newBuffer([0x62,0x75,0x66,0x66,0x65,//createsanewBuffercontainingASCII//newbuffer

constconstbuf1=newBuffer('buffer');constbuf2=newBuffer(buf1);buf1[0]=0x61;//'auffer'//'buffer'(copyisnotnewBuffer(arrayBuffer[,byteOffset[,new new

{Number}{Number}默认:arrayBuffer.length

constconstarr=newUint16Array(2);arr[0]=5000;arr[1]=constbuf=newBuffer(arr.buffer);//sharesthememorywitharr;//Prints:<Buffer8813a0//changingtheTypdArraychangestheBufferalsoarr[1]=6000;//Prints:<Buffer881370newBuffer(str[,{String{String}constbuf1=newBuffer('thisisconstbuf1=newBuffer('thisisatést');//prints:thisisatést//prints:thisisaconstbuf2=newBuffer(' 2074c3a97374','hex');//prints:thisisaBuffer.byength(string[,

string{String}|{Buffer}|{TypedArray}|{DataView}|{String}constconststr='\u00bd+\u00bc=console.log(`${str}:${str.length}characters,` ength(str,'utf8')}//½+¼=¾:9characters,12

/DataView/TypedArray

obj {String需要测试的编码字符串 arrayconstconstbuf=Buffer.from([0x62,0x75,0x66,0x66,0x65,//createsanewBuffercontainingASCII//

buffer

constconstbuf1=Buffer.from('buffer');constbuf2=Buffer.from(buf1);buf1[0]=0x61;//'auffer'//'buffer'(copyisnot

Buffer.from(arrayBuffer[,byteOffset[,new new

{Number}{Number}默认:arrayBuffer.length

那constconstarr=newUint16Array(2);arr[0]=5000;arr[1]=constbuf=Buffer.from(arr.buffer);//sharesthememorywitharr;//Prints:<Buffer8813a0//changingtheTypedArraychangestheBufferalsoarr[1]=6000;//Prints:<Buffer881370

constconstab=newArrayBuffer(10);constbuf=Buffer.from(ab,0,2);//Prints:

Buffer.from(str[,{String{String}

constconstbuf1=Buffer.from('thisisatést');//prints:thisisatést//prints:thisisaconstbuf2=Buffer.from(' 2074c3a97374','hex');//prints:thisisa

Buffer.alloc(size[,fill[,size{Value}默认:{String}

将被零constconstbuf=Buffer.alloc(5);//<Buffer00000000

(2^31)-的0长度(zero-length)的Buffer(2^31)-

constconstbuf=Buffer.alloc(5,'a');//<Buffer61616161

)constconstbuf=Buffer.alloc(11,'aGVsbG8gd29ybGQ=','base64');//<Buffer68656c6c6f20776f726c 要慢,但可以确Buffer size

。size length)Buffer

00长度

constconstbuf=Buffer.allocUnsafe(5);//<Buffer78e08202//(octetswillbedifferent,everytime)//<Buffer00000000

Buffer.poolSize>>Buffer.poolSize>>

实例(

Buffer.alloc(size,Buffer.alloc(size,

Buffer.alloc(size,Buffer.alloc(size,{Number}Buffer的总大小。

Buffer

constconstbuf1=Buffer.alloc(10,0);constbuf2=Buffer.alloc(14,0);constbuf3=Buffer.alloc(18,0);consttotalLength=buf1.length+buf2.length+constbufA=Buffer.concat([buf1,buf2,buf3],totalLength);////<Buffer00000000...//pare(buf1,buf1buf2 。

constconstarr=[Buffer.from('1234'),Buffer.from('0123')]; 实例的属性如在下面的例子中,一个Buffer1234字节,但只写入了11ASCII字节。constconstbuf=//Prints:buf.write('somestring',0,'ascii');//Prints: varbuf=Buffer.allocUnsafe(10);buf.write('abcdefghj',0varbuf=Buffer.allocUnsafe(10);buf.write('abcdefghj',0,'ascii');//Prints:buf=buf.slice(0,5);//Prints:

()

位置的8conststr=constbuf=for(variconststr=constbuf=for(vari=0;i<str.length;{buf[i]=}//Prints:buf.toString([encoding[,start[,{String}{Number}{Number}默认:constconstbuf=Buffer.allocUnsafe(26);for(vari=0;i<26;i++){buf[i]=i+97;//97isASCII}//Returns:'abcdefghijklmnopqrstuvwxyz'buf.toString('ascii',0,5);//Returns:'abcde'buf.toString('utf8',0,5);//Returns:'abcde'buf.toString(undefined,0,5);//Returns:'abcde',encodingdefaultstoconstbuf=Buffer.from('test');constconstbuf=Buffer.from('test');constjson=JSON.stringify(buf);//Prints:constcopy=JSON.parse(json,(key,value)=>returnvalue&&value.type==='Buffer'?Buffer.from(value.data)://Prints:{Number}{Number}默认:

索引值进行constconstbuf1=for(vari=0;i<26;{buf1[i]=i+97;//97isASCII}constbuf2=buf1.slice(0,3);buf2.toString('ascii',0,buf2.length);//Returns:'abc'buf1[0]=33;buf2.toString('ascii',0,//Returns:constconstbuf=buf.slice(-6,-//Returns'buffe',equivalenttobuf.slice(0,5)buf.slice(-6,-2).toString();//Returns'buff',equivalenttobuf.slice(0,4)buf.slice(-5,-2).toString();//Returns'uff',equivalenttobuf.slice(1,buf.fill(value[,offset[,end]][,value{String}|{Buffer}|{Number}{Number}默认:{String}

)

0没有明确给出,将会填充整个buffer。该方法返回一个当前Buffer的,以便于链式调用。这也意味着可以通过这种小而简的方式创建一个Buffer。允许在单行内创建和填充Buffer:0constconstb=Buffer.alloc(50,'h');//Prints: 不是 类型些字节塞到被写入的buffer里。Buffer.alloc(Buffer.alloc(3,//Prints:<Bufferc8a2buf.indexOf(value[,byteOffset][,value{String}|{Buffer}|{Number}{String}- -

constconstbuf=Buffer.from('thisisa//returns0//returns2buf.indexOf(Buffer.from('abuffer'));//returnsbuf.indexOf(97);//asciifor//returnsbuf.indexOf(Buffer.from('abuffer//returns-buf.indexOf(Buffer.from('abufferexample').slice(0,//returnsconstutf16Buffer=Buffer.from('\u039a\u0391\u03a3\u03a3\u0395','ucs2');utf16Buffer.indexOf('\u03a3',0,'ucs2');//returnsutf16Buffer.indexOf('\u03a3',-4,//returnsbuf.includes(value[,byteOffset][,value{String}|{Buffer}|{Number}{String}

、Buffer

参数。Buffer0255 constconstbuf=Buffer.from('thisisa//returnstrue//returnstruebuf.includes(Buffer.from('abuffer'));//returnsbuf.includes(97);//asciifor//returnsbuf.includes(Buffer.from('abuffer//returnsbuf.includes(Buffer.from('abufferexample').slice(0,//returnstruebuf.includes('this',4);//returnsbuf.copy(targetBuffer[,targetStart[,sourceStart[,{Number}{Number}{Number}的第8位开始(覆盖)。

constconstbuf1=constbuf2=for(vari=0;i<26;{buf1[i]=i+97;//97isASCII}buf1.copy(buf2,8,16,console.log(buf2.toString('ascii',0,//Prints:constconstbuf=for(vari=0;i<26;{buf[i]=i+97;//97isASCII}buf.copy(buf,0,4,10);//otherBuffer

Buffer0 01 1- -constconstbuf1=Buffer.from('ABC');constbuf2=constbuf3=//Prints:0//Prints:-1//Prints:1//Prints:1//Prints:[buf1,buf2,//producessortorder[buf1,buf3,otherBuffer

constconstbuf1=constbuf2=Buffer.from('414243','hex');constbuf3=Buffer.from('ABCD');//Prints:true//Prints:constbuf=constbuf=Buffer.from('buffer');for(varpairofbuf.entries()){}[index,

012345constconstbuf=Buffer.from('buffer');for(varkeyofbuf.keys()){}constbuf=Buffer.from('buffer');forconstbuf=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论