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)
})
/*
*/
//解决方法-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
})