[路飞]_nodejs入门

153 阅读4分钟

1. 如何通过nodejs启动一个文件

我们在C:\Users\wzl\Desktop\node\index.js这个路径下建立一个index.js文件,在终端通过node+地址的形式可以直接执行这个文件。

image.png image.png

2.搭建一个最简单的服务

const http = require("http");//require方法是引用模块的语法糖,这里引用http模块

//通过createServer方法创建服务
const server = http.createServer((req,res)=>{
  res.write("hello world");//输出的内容
  res.end();
})
server.listen(3000)//定义服务的端口号
  • 启动服务

image.png

  • 得到输出 image.png

此时如果我们通过局域网的其他电脑想访问这个服务,就不能用localhost,因为localhost指向本机,其他电脑访问时需要通过本机的ip来访问。

image.png

当服务端代码有更新时,我们需要重启服务后,客户端(其他电脑)再刷新时才会执行服务端最新的代码。 安装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的。

image.png

image.png

image.png

如果我们想要使用model.js中的name,需要通过module.exports方式将需要向外界暴露的属性和方法以对象的形式导出。

image.png

image.png

image.png

  • 在nodejs中,有个nodejs规划好的文件夹:node_modules,在这下边创建js的话,在引用时可以不加./或../等。

image.png

image.png

  • 我们可以通过在node_modules中创建package.json定义一些参数去修改引用的默认文件。如当我们引用node_modules中mytest时想把访问的入口文件改为main.js,可以设置main:"main.js".

image.png

image.png

image.png

3. fs模块

文件操作

fs模块是针对于文件操作的模块,基本功能为增删改查。

  1. 增:writeFile("文件名","内容",配置项,回调函数)

image.png

image.png

image.png

当我们修改内容再次执行后,并不是追加,而是重新创建该文件进行覆盖。

image.png image.png

这时我们可以通过第三个参数进行配置,flag-->a:追加写入,w:写入,r:读取,默认为w

image.png

image.png

image.png

  1. 查:readFile("文件地址","读取格式",回调函数)

image.png

image.png

这里如果第二项不设置成utf8格式读取的话,那么读取的数据会以二进制形式显示,

image.png

image.png

此时我们可以通过.toString()形式对data数据进行转换。

image.png

image.png

  • 所有文件操作没有加Sync的都是异步调用,否则是同步

image.png

image.png

  1. 修改:可以使用writeFile对内容修改,可以使用rename("原文件地址","修改后的名称",回调函数)对文件名修改

image.png

image.png

  1. 删除:unlink("文件路径名",回调)

image.png

image.png

  1. 复制:copyFile("需要复制的文件地址","复制后的文件名",回调)

image.png

image.png

目录操作

目录操作的方法同步与异步的区别依然是通过方法后是否有Sync来区别。

  1. 创建目录:mkdir("目录名",回调)

image.png

image.png

  1. 修改目录名:rename("需要修改的目录","修改后的目录名",回调函数)

image.png

image.png

  1. 读取目录:readdir("目录的相对路径",回调)

image.png

image.png

  1. 删除目录:rmdir("目录相对路径",回调),删除目录的条件是该目录为一个空目录,否则会报错。

image.png

image.png

image.png

image.png

image.png

  1. 判断文件或目录是否存在:exists("文件相对路径",回调)

image.png

image.png

  1. 获取文件或目录的详细信息:stat("文件相对路径",回调)

image.png

image.png 可以通过stat判断该文件是目录还是文件

  • 是否是文件isFile()
  • 是否是目录isDirectory()

image.png

这里model.js是个文件

image.png

  1. 删除非空文件夹:拿到文件夹下所有文件,判断是文件还是目录:文件--->删除,目录--->继续查找

image.png

image.png

image.png

  1. 文件传输: createReadStream("文件相对路径"),流读取通过on("data",回调) 文件传输会通过“流”的方式进行多次传输,这样可以把一个大文件拆分成n个小文件,保证接收端不会因为存储空间或者带宽不足导致传输失败。

image.png

每个文件会被拆分成n个64kb大小的文件。

  • 64kb的文件只输出了一次

image.png

image.png

  • 65kb文件读取了两次

image.png

image.png

流的读取结束通过on("end",回调)

image.png

image.png

将读取的流写入到文件 通过pipe进行写入

image.png

image.png