node.js的安装和使用
安装:直接去官网下载稳定版本;node安装完会自动安装npm(包管理工具)。
查看版本号:通过node -v(注意空格)来查看是否安装完成和当前版本号。
服务端及客户端
创建服务的就是服务端;去访问的就是客户端。
模块化的概念
每个文件就是一个模块,都有自己独立的命名空间,模块化的好处就是不会有模块之间的变量污染。
node.js中的模块化,就是commonjs规范;js是没有模块的功能的,所以commonjs应运而生,他希望js可以在任何地方运行,不只是浏览器中。
1.引入模块
require("./文件夹名或者文件名")//必须加./
//第三方模块和内置模块不用加./
2.导出模块
module.exports={
在这个对象里面可以放任何数据类型,用于从这个文件里面导出,在其他文件里面require导入的时候去使用
}
const obj=require("要引入的模块");//这行代码的意思是在引入模块的时候用一个变量或者常量去保存
node_modules
这个文件夹放的是我们项目依赖的第三方模块,因为就光node的内置模块是远远不够的,很多好的第三方模块都存在于npm这个包管理器里面。我们直接使用npm去下载第三方模块到我们的项目里面就可以直接去使用。
npm包管理器
1.npm 常用指令
- npm install 模块的名字 -S或者--save;安装的是项目的运行时依赖;也就是说,从开发到项目上线运行过程中始终要依赖的模块,那么,我们就要通过这种方式去安装。会写入到package.json的dependencies
- npm install 模块的名字 -D或者--save-dev ;安装的是项目的开发时依赖,在项目开发的过程中需要依赖的模块,项目上线之后就不需要该模块的依赖就使用这种方法。会写入到package.json的devDependencies
- npm install 模块的名字 -g;全局安装
- npm install 模块的名字 @1.0;安装指定的版本号
- npm init 创建一个package,json文件
文件操作fs
fs是文件操作模块,所有文件操作都是有同步和异步之分,特点是同步会加上 "Sync" 如:异步读取文件 "readFile",同步读取文件 "readFileSync";
异步有回调函数
同步没有回调函数
异步文件写入
const fs=require("fs")
//a:追加写入;w:写入-默认;r:读取
fs.write("1.txt","我是写入的内容",{flag:"a"},function(err){
if(err){
return console.log(err)
}
console.log("写入成功")
}
异步文件读取
fs.readFile("1.txt","utf8",function(err,data){
if(err){
return console.log(err)
}
console.log(data)
})
//如果不加utf8读取的是buffer数据
fs.readFile("1.txt",function(err,data){
if(err){
return console.log(err)
}
console.log(data)
})
/*
<Buffer e6 88 91 e6 98 af e5 86 99 e5 85 a5 e7 9a 84 e6 96 87 e5 ad 97 e6 88 91 e6 98 af e5 86 99 e5 85 a5 e7 9a 84 e6 96 87
e5 ad 97 e6 88 91 e6 98 af e5 86 ... >
*/
//解决方法-toString()
fs.readFile("1.txt",function(err,data){
if(err){
return console.log(err)
}
console.log(data.toString())
})
同步读取文件
let data=fs.readSync("1.txt")
console.log(data.toString())
修改文件名称
fs.rename("1.txt","2.txt",err=>{
if(err){
return console.log(err)
}
console.log("修改成功")
})
删除文件
fs.unlink("2.txt",(err)=>{
if(err){
console.log(err)
}
console.log("删除成功")
})
复制文件
fs.copyFile("index.html","myindex.html",err=>{
if(err){
return console.log(err)
}
console.log("赋值成功")
})
目录操作
创建一个目录-新建一个文件夹
fs.mkdir("filename",err=>{
if(err){
return console.log(err)
}
console.log("创建目录成功")
})
**修改目录名称
fs.rename("filename","newfile",err=>{
if(err){
return console.log(err)
}
console.log("创建目录成功")
})
//将文件名filename修改为newfile
读取目录
fs.readdir("newfile",(err,data)=>{
if(err){
return console.log(err)
}
console.log(data)
})
//[ '1.html' ];读取到文件夹里面的文件,还是以目录的形式在数组中展示
删除目录
fs.rmdir("newfile",err=>{
if(err){
return console.log(err)
}
console.log("删除成功")
})
//删除的目录必须是一个空文件夹,有点鸡肋
判断文件或者目录是否存在
fs.exists("newfile",exists=>{
console.log(exists)
})
//返回boolean值
获取文件或者目录的详细信息
fs.stat("newfile",(err,stat)=>{
if(err){
return console.log(err)
}
console.log(stat)
})
Stats {
dev: 1485554439,
mode: 16822,
nlink: 1,
uid: 0,
gid: 0,
rdev: 0,
blksize: undefined,
ino: 3096224744858300,
size: 0,
blocks: undefined,
atimeMs: 1578223166685.2402,
mtimeMs: 1578223166685.2402,
ctimeMs: 1578223166685.2402,
birthtimeMs: 1578222948185.005,
atime: 2020-01-05T11:19:26.685Z,
mtime: 2020-01-05T11:19:26.685Z,
ctime: 2020-01-05T11:19:26.685Z,
birthtime: 2020-01-05T11:15:48.185Z }
//这就是该文件夹的详细信息
//判断stat(这个参数代表newfile)是文件还是文件夹
fs.stat("newfile",(err,stat)=>{
if(err){
return console.log(err)
}
//判断文件是否是文件
let res1=stat.isFile();
console.log(res1);//false
let res2=stat.isDirectory()
console.log(res2);//true
})