1. 如何通过nodejs启动一个文件
我们在C:\Users\wzl\Desktop\node\index.js这个路径下建立一个index.js文件,在终端通过node+地址的形式可以直接执行这个文件。
2.搭建一个最简单的服务
const http = require("http");//require方法是引用模块的语法糖,这里引用http模块
//通过createServer方法创建服务
const server = http.createServer((req,res)=>{
res.write("hello world");//输出的内容
res.end();
})
server.listen(3000)//定义服务的端口号
- 启动服务
- 得到输出
此时如果我们通过局域网的其他电脑想访问这个服务,就不能用localhost,因为localhost指向本机,其他电脑访问时需要通过本机的ip来访问。
当服务端代码有更新时,我们需要重启服务后,客户端(其他电脑)再刷新时才会执行服务端最新的代码。 安装nodemon指令:npm i nodemon -g,nodemon具有热更新功能,使用nodemon启动服务,当服务端修改代码后,无需重启服务便可在客户端得到最新的代码运行。
- require语法糖 nodejs中将每个文件都包装成相互独立的js文件,这样可以防止文件之间变量污染。如有两个js文件a.js和b.js,在a.js中有个变量name,在b.js中也有个变量name,name在a.js中引用b.js后在调用name变量是就存在一个使用哪个js中的name变量问题。而nodejs通过require引用的方式,将各个文件独立化,我们在a.js中是不可以访问b.js中的name的。
如果我们想要使用model.js中的name,需要通过module.exports方式将需要向外界暴露的属性和方法以对象的形式导出。
- 在nodejs中,有个nodejs规划好的文件夹:node_modules,在这下边创建js的话,在引用时可以不加./或../等。
- 我们可以通过在node_modules中创建package.json定义一些参数去修改引用的默认文件。如当我们引用node_modules中mytest时想把访问的入口文件改为main.js,可以设置main:"main.js".
3. fs模块
文件操作
fs模块是针对于文件操作的模块,基本功能为增删改查。
- 增:writeFile("文件名","内容",配置项,回调函数)
当我们修改内容再次执行后,并不是追加,而是重新创建该文件进行覆盖。
这时我们可以通过第三个参数进行配置,flag-->a:追加写入,w:写入,r:读取,默认为w
- 查:readFile("文件地址","读取格式",回调函数)
这里如果第二项不设置成utf8格式读取的话,那么读取的数据会以二进制形式显示,
此时我们可以通过.toString()形式对data数据进行转换。
- 所有文件操作没有加Sync的都是异步调用,否则是同步
- 修改:可以使用writeFile对内容修改,可以使用rename("原文件地址","修改后的名称",回调函数)对文件名修改
- 删除:unlink("文件路径名",回调)
- 复制:copyFile("需要复制的文件地址","复制后的文件名",回调)
目录操作
目录操作的方法同步与异步的区别依然是通过方法后是否有Sync来区别。
- 创建目录:mkdir("目录名",回调)
- 修改目录名:rename("需要修改的目录","修改后的目录名",回调函数)
- 读取目录:readdir("目录的相对路径",回调)
- 删除目录:rmdir("目录相对路径",回调),删除目录的条件是该目录为一个空目录,否则会报错。
- 判断文件或目录是否存在:exists("文件相对路径",回调)
- 获取文件或目录的详细信息:stat("文件相对路径",回调)
可以通过stat判断该文件是目录还是文件
- 是否是文件isFile()
- 是否是目录isDirectory()
这里model.js是个文件
- 删除非空文件夹:拿到文件夹下所有文件,判断是文件还是目录:文件--->删除,目录--->继续查找
- 文件传输: createReadStream("文件相对路径"),流读取通过on("data",回调) 文件传输会通过“流”的方式进行多次传输,这样可以把一个大文件拆分成n个小文件,保证接收端不会因为存储空间或者带宽不足导致传输失败。
每个文件会被拆分成n个64kb大小的文件。
- 64kb的文件只输出了一次
- 65kb文件读取了两次
流的读取结束通过on("end",回调)
将读取的流写入到文件 通过pipe进行写入