node.js学习笔记1 fs模块、path模块、http模块


1. 什么是Node.js

Node.js是一个基于Chrome V8引擎的javascript运行环境

2. Node.js中的javascript运行环境

⚠️:浏览器是js的前端运行环境,Node.js是js的后端运行环境,Node.js中无法调用DOM和BOM等浏览器内置API
请添加图片描述

3. fs文件系统模块

fs模块是Node.js官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
例如:

  • fs.readFile()方法,用来读取指定文件中的内容
  • fs.writeFile()方法,用来向指定文件中写入内容

如果要在javascript代码中,使用fs模块来操作文件,则需要使用如下的方式先导入它

const fs = require('fs')

3.1 读取指定文件中的内容

fs.readFile()方法,可以读取指定文件中的内容
例:

const fs = require('fs');
// 1文件路径,2以什么编码格式来读取文件(可选),3文件读取完成后通过回调函数拿到读取的结果
fs.readFile('./1.txt','utf8',(err,data) => {
  if(err) {
    return err;  // 失败的结果
  }
  console.log(data); // 成功的结果
  // 如果读取成功,err值为null
  // 如果读取失败,err值炜错误对象,data值为undefined
})

3.2 向指定文件中写入内容

fs.writeFile()方法,可以向指定文件中写入内容
例:

const fs = require('fs');
// 1文件路径,2文件内容,3文件编码格式(可选,此处省略),4回调函数
fs.writeFile('./2.txt','hello node',err => {
  if(err) {
    return err;
  }
  // 文件写入成功err值为null,写入失败err值为错误对象
})

3.3 fs-整理成绩的小案例

使用fs模块,将成绩1.txt文件中的数据,整理到成绩2.txt文件中

  • 整理前,成绩1.txt文件中的数据格式如下:
小红=99 小白=100 小黄=70 小黑=66
  • 要求整理后,成绩2.txt文件中的数据格式如下:
小红,99
小白,100
小黄,70
小黑,66

代码:

const fs = require('fs');
fs.readFile('./成绩1.txt','uft8',(err,data) => {
  if(err) return err;
  let arr = data.split(' ');
  arr = arr.map(item => item.replace('=',','));
  // 添加换行
  let str = arr.join('\r\n');
  fs.writeFile('./成绩2.txt',str,err => {
    if(err) return err;
  })
})

补充:__dirname表示当前文件所处的目录

4. path路径模块

path模块是Node.js官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理需求。
例如:

  • path.join()方法,用来将多个路径片段拼接称一个完整的路径字符串
  • path.basename()方法,用来从路径字符串中,将文件名解析出来

如果要在javascript代码中,使用path模块来操作文件,则需要使用如下的方式先导入它

const path = require('path')

4.1 path.join()

使用path.join(),可以把多个路径片段拼接为完整的路径字符串:
注意:../会抵消前面的路径

const path = require('path');
const pathStr = path.join('/a','/b/c','../','./d');
console.log(pathStr);   // 输出/a/b/d
// ../抵消掉前面的/c
const pathStr2 = path.join(__dirname,'./1.txt');
console.log(pathStr2);  // 输出当前文件所处目录/1.txt

注意:凡是涉及到路径拼接的操作,都要用 path.join()进行处理,不要直接使用+进行字符串的拼接

4.2 path.basename()

使用path.basename()方法,可以从一个文件路径中获取到文件的名称部分

const path = require('path');
const fpath = '/a/b/c/index.html';  // 文件的存放路径
const fullName = path.basename(fpath);
console.log(fullName);  // 输出index.html

// 参数2是文件的后缀名,可选
const nameWithoutExt = path.basename('fpath','.html');
console.log(nameWithoutExt);   // 输出index

5. http模块

http模块是Node.js官方提供的、用来创建web服务器的模块。通过http模块提供的http.createServer()方法,就能方便地把一台普通的电脑,变成一台Web服务器,从而对外提供Web资源服务

服务器和普通电脑的区别在于,服务器上安装了web服务器软件,在Node.js中我们不需要使用第三方web服务器软件,因此我们可以基于Node.js提供的http模块,通过几行简单的代码,就能轻松的手写一个服务器软件。

5.1 创建最基本的web服务器的基本步骤

1.导入http模块

const http = require('http');

2.创建web服务器实例
调用http.createServer()方法,即可快速创建一个web服务器实例

const server = http.createServer();

3.为服务器实例绑定request事件,监听客户端的请求
使用服务器实例的on()方法,为服务器绑定一个request事件

server.on('request',(req,res) => {
// 只要有客户端来请求我们的服务器,就会触发request事件,从而调用这个时间处理函数
  console.log('Someone visit our web server');
})

4.启动服务器
调用服务器实例的listen()方法,即可启动当前的web服务器实例

server.listen(8080,() => {
  console.log('http server running at http://127.0.0.1:8080')
})

5.2 req请求对象

只要服务器接收到了客户端的请求,就会调用通过server.on()为服务器绑定的request事件处理函数
如果想在事件处理函数中,访问与客户端相关的数据和属性,可以使用如下的方式:

server.on('request',req => {
  // req.url是客户端请求的URL地址
  // req.method是客户端的method请求类型
  const str = `Your request url is ${req.url} and request method is ${req.method}`;
  console.log(str);
})

5.3 res响应对象

在服务器的request事件处理函数中,如果想访问与服务器相关的数据和属性,可以使用如下的方式:

server.on('request',(req,res) => {
  const str = `Your request url is ${req.url} and request method is ${req.method}`;
  // res.end()向客户端发送指定的内容,并结束本次请求的处理过程
  res.end(str);
})

5.4 解决中文乱码问题

当调用res.end()方法,向客户端发送中文内容的时候,会出现乱码问题,此时需要手动设置内容的编码格式

server.on('request',(req,res) => {
  const str = `您请求的url地址是 ${req.url},请求的method类型是${req.method}`;
  // 为了防止中文显示乱码的问题,需要设置响应头Content-Type的值为text/html; charset=utf-8
  res.setHeader('Content-Type','text/html; charset=utf-8')
  // 把包含中文的内容响应给客户端
  res.end(str);
})
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值