zdxnodemkdir v1.0.0
#node
##node简介
简单的说node就是运行在服务器端的JavaScript
nodejs 是基于Chrome javascript运行时建立的平台
nodejs是事件驱动的基于非阻塞的基于V8引擎的javascript的运行环境
1、进入官网进行下载
2、偶数版本是稳定版,奇数版本是试用版
##安装
###window下安装
1、安装包中一个是node.msi,一个是node.exe,.exe文件就是一个二进制文件
要想在命令行运行node必须手动的将node.exe放到全局路径下面。node.msi包含了node
要选择add to path 将node.exe放到全局路径下
安装完成之后可以使用node -v 命令检测版本;npm -v可以检测npm的版本以及是否安装成功
##npm包管理工具(node package manage)
1、为了nodejs的程序人员开发方便,提供的一个包管理工具,(可以到npm官方网站上查看),不用关心自己编写的模块或者是他人编写的模块存放到哪里,或者有什么依赖关系
##执行第一个程序
###交互方式运行nodejs
1、node+回车(进入到node的编译环境)
2、在这个环境下只要你输入符合nodejs语法规范的代码,回车后会立即的到相应的结果
3、可以通过ctrl+c或者输入process.exit();退出node编译环境
###编译方式
1、创建一个js文件
2、在命令行进入文件所在目录 通过node node.js
对这个js文件进行解析和编译,如果想在控制台有所输出必须在js文件中console.log()
输出
##nodejs运行环境的配置
1、phpstrom来配置nodejs的运行环境
如果用到webStrom不用进行配置,因为这个编译器已经把响应的配置文件配置好了
(1)打开ps的配置项(setting)
(2)打开插件库plugin搜索nodejs,搜索成功后点击install进行安装,安装完成会有提示
(3)打开配置项,在framework中找到node and npm
(4) 设置node的作用域,和enable
#nodejs语法
##nodejs全局对象
1、在JavaScript中有一个全局对象window(直接拿来用的)
2、node中的全局对象是global
###global中的子对象
1、console
1.1console.log("var",a)在控制台输出信息
1.2console.error("error",:"输出信息有误")
1.3console.time(在程序运行之前调用,记录当前的时间信息)
1.4console.timeEnd(在程序运行之后运行)
1.5console.track(追踪程序运行)
2、exports module(见下一张)
3、progress
用于操作或者获取或者查看当前进程对的相关消息
precess.argv 是用来获取命令行的参数"执行二进制文件",”它的第一成员总是node,第二个成员是脚本文件名,其余成员是脚本文件的参数
process.cwd():返回当前进程的工作目录
process.chdir(directory):改变当前工作目录
process.stdin 标准的输入流
process.stdout 标准的输出流
事件“”data process.
主动去触发自定义事件
输入流的状态
precess.pause
process.resume
0:废弃
1:验证 在验证阶段不建议去使用,随时可能废除
2 不稳定在某些平台可以使用,并且不太稳定,不建议使用时刻关注最新版
3 稳定 进入稳定阶段,即使是改动也是改动最底层的接口和性能,不影响使用
4 冻结 已经非常稳定,可以投入到项目中使用
5 锁定 很长时间内不会升级\迭代,不接受修改(除非发生重大bug)
3、require(path)引入其他模块
require.cache 记录了当前文件所引入的所有模块
require.resolve(path)将引用模块的相对路径装换成绝对路径
#模块的概念
简介:因为在js中没有模块的概念所以会存在一些问题,覆盖,变量的重用
一个模块,一个模块就是一个文件,每一个文件都是一个独立的作用域,模块下定义的所有变量和函数都是属于这个模块的。如果想在全局中使用这些变量和函数,
必须通过global来定义。(通过global定义的变量和函数属性都具有全局性)
一般我们不会使用global来定义变量,因为这样子定义的是一个全局变量,会长期存在于内存中
通过require("路径")引进模块文件
1、moudle中有一个子对象exports子对象
moudle.exports.a=a(将a发射出去;a作为exports的一个属性)
2、也可以直接通过exports
exports.a=a;(其实exports对象是moudle.exports的一个复制)
其实exports===moudle.exports,能够将当前模块下的值发射出去,让引用模块来获取相应的值
moudle.exports和exports他们是引用关系,如果直接给其中的一个赋值,会影响另一个的值(因为他们指向同一个对象)
##模块(nodejs中有3类模块)
###自定义的模块
在使用自定义模块时,引入某一个模块require(./..)
必须是路径,不加路径的话会以为你调用的是核心模块
这个路径可以是绝对路径也可以是相对路径;同样引入核心模块时require(文件名称)
###内置模块
###外部模块(包)
别人写好的模块
##魔术常量
1、dirname (当前运行文件的目录)
2、filename(指当前运行的文件)
##buffer模块
buffer是一个基础类型,所以有固定长度放在栈中的,所以读取速度比较快var buffer=new Buffer(10)
输入数字表示buffer的长度是10个字节
输入字符串
var buffer=new Buffer("abc")
输入数组
var buffer=new Buffer([1,2,3])
数组的内容的类型不能随便写
以二进制的方式将buffer中的内容读取出来buffer.toString()方法
##fs(文件模块)
官网参考笔记:http://www.runoob.com/nodejs/nodejs-fs.html
###方法
0、获取文件信息fs.stat(path,callback)
path:要读取文件的路径
callback:回调函数,有两个参数callback(error,stats)
stats:表示读取文件之后会产生一个stats类的实例返回给callback。由此我们可以通过stats类中属性和方法来获取文件的信息
返回的stats可以调用stats.isFile()
和stats.isDirectory()
来判断是文件还是路径
1、打开文件
异步方式打开fs.open(path,flag,[mode],callback)
path:要打开的文件的路径
flag:打开文件的方式
mode:权限
callback(error,id):有两个参数,error(文件不存在的时候会报错),id:文件标识符
2、读取文件
异步读取文件fsobj.read(fd, buffer, offset, length, position, callback)
fd:通过open方法得到的文件标识符
buffer:数据写入的缓冲区
offset:缓冲区写入的写入偏移量
length:要从文件中读取的文件偏移量
position:开始读取的位置,position为null就从文件的当前指针开始读
callback:回调函数,有三个参数,error,bytesRead,buffer。error错误信息,bytesRead读取的字节数,buffer缓存区对象
3、写入文件
之前的方法是比较底层的方法fs.write(fd,buffer,offset,length,[,position],callback)
fd:文件标识符
buffer:要写入的内容
offset:要写入“写入文件”的什么位置
length: 要写的字节数
position:写入内容的什么位置开始写
callback:回调函数
4、写入文件
fs.writeFile(file,data[,options],callback)
它会把原来文件中的内容替换成写入的文件
file:文件的名字或文件的路径(当然也可以是buffer)
data:string|buffer
options:设置选项
创建文件并写入内容
5、追加内容
appendFile
如果文件存在,往里面追加内容,如果不存在和writeFile一样
6、修改文件的名字fs.rename(oldPath,newPath,callback)
oldPath:原文件名字
newPath:新名字
7、删除文件fs.unlink(path,callback)
8、读取文件fs.readFile(filePath,[,option],callback)
filePath:要读取的文件名
8、拷贝文件
把a文件中的内容复制到b文件中可以自己编写function copy(filename){
var fs=require("fs");
var index=filename.indexOf(".");
var basename=filename.slice(0,index);
var lastname=filename.slice(index);
var newfilename=basename+"(1)"+lastname;
fs.readFile(filename,function(err,data){
if(err){
console.log("出错");
}else{
fs.writeFile(newfilename,data,function(error){
if(error) {
console.log("出错")
}
})
}
})
}
操作路径
1、创建路径
fs.mkdir(path,[,mode])
path:路径名
2、删除路径fs.rmdir(path,callback)
path:要删除的路径名
##node的版本升级步骤
1、npm install -g n
2、n
###补充
对文件的操作一系列操作是一个连贯的过程,不能分开来执行
var a=e=>b;(EC6中的函数符号,a:函数名,e:参数,b函数体 var a=e=>{},可以解决this的指向问题)
9 years ago