Node.js(复习1)

本文介绍了Node.js的基础知识,包括其作为JavaScript运行环境的角色,以及它可以用于构建Web应用、桌面应用和API接口等。详细讲解了fs模块的文件读写操作,path模块的路径处理功能,以及http模块如何创建基本的web服务器。还涉及了IP地址、域名、端口号等相关概念。
摘要由CSDN通过智能技术生成

目录

目录

初始Node.js与内置模块

1.Node.js

1.1Node.js是什么

1.2Node.js 可以做什么

1.3Node.js  的组成部分

2.fs文件系统模块

2.1什么是fs文件系统模块

2.2读取指定文件中的内容

2.3向指定的文件写入内容

3.path路径系统模块

3.1什么是path路径模块

3.2路径拼接 path.join()

3.3获取路径中的文件名

3.4获取路径中的文件扩展名

4.http模块

4.1 什么是http模块

4.2 进一步理解http模块的作用

4.3 服务器相关的概念

4.4创建最基本的web服务器

4.5 根据不同的url响应不同的html内容



初始Node.js与内置模块

1.Node.js

1.1Node.js是什么

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

传统的 JavaScript 只能运行在浏览器端,脱离浏览器不能运行,也就不能操作本地的文件或者创建文件,也不能进行网络编程,Node.js 的出现打破了这一局面。
Node.js 编写的代码还是 JS,所以开发者需要利用 Chrome V8 来运行 JS。Node.js 借助了 C/C++ 中的 libuv 库来实现文件读取和事件循环。我们不必深挖其中的原理,只需要知道如何使用就行,Node.js 已经为我们打包好了相关接口。

1.2Node.js 可以做什么

1.基于Express框架(http://www.expressjs.com.cn/),可以快速构建Web应用

2.基于Electron框架(https://electronjs.org/),可以构建跨平台的桌面应用

3.基于restify框架(http://restify.com),快速构建API接口项目

4.读写和操作数据库,创建实用的命令行工具辅助前端开发,etc....

1.3Node.js  的组成部分

javaScript基础语法+Node.js内置API(fs,path,http等)+第三方API模块(express,mysql等)

2.fs文件系统模块

2.1什么是fs文件系统模块

  • 在 Node 中有一个文件系统,所谓的文件系统,就是对计算机中的文件进行增删改查等操作。
  • 在 NodeJs 中,给我们提供了一个模块,叫做fs模块(文件系统),专门用于操作文件。
  • fs模块是 Node 的核心模块,使用的时候,无需下载,直接引入(使用require进行引入)
//引入fs模块
const fs = require('fs');

2.2读取指定文件中的内容

1.fs.readFile()的语法格式

使用fs.readFile()方法,可以读取指定文件中的内容,语法格式如下:

fs.readFile(path[,oprions],callback(err,dataStr))

参数解读:

  • 参数1:必选参数,字符串,表示文件的路径.
  • 参数2:可选参数,表示以什么编码格式来读取文件.
  • callback回调函数:err代表读取失败,dataStr为读取成功

2. fs.readFile()的实例代码

fs.readFile('./files/1.txt', "utf8", function (err, dataStr) {
  //2.1 打印失败的结果
  //如果读取成功,则err的值为null
  //如果读取失败,则err的值为错误对象,dataStr的值为undefined
  console.log(err);
  console.log('------------');
  //2.2打印成功的结果
  console.log(dataStr);
})

2.3向指定的文件写入内容

1.fs.writeFile()的语法格式

使用fs.writeFile()方法,可以向指定文件中写入内容,语法格式如下:

fs.writeFile(file,data[,options],callback)

参数解读:

  • 参数1:必选参数,需要指定一个文件路径的字符串,表示文件存放路径
  • 参数2:必选参数,表示要写入的内容
  • 参数3:可选参数,表示以什么格式写入文件内容,默认值为utf8
  • callback回调函数:err代表写入失败

2. fs.readFile()的实例代码

fs.writeFile('./files/4.txt', 'abc1d', function (err) {

  //2.1 如果文件写入成功 则err的值等于null
  //如果文件没有创建,会自动创建并写入值,如果有会覆盖原本的值
  //2.2 如果文件写入失败 则err的值返回一个错误对象
  //console.log(err);
  if (err) {
    return console.log('文件写入失败' + err.message);
  }
  console.log('文件写入成功');
})

3.path路径系统模块

3.1什么是path路径模块

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

例如

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

导入方式

const path = require('path')

3.2路径拼接 path.join()

path.join()方法,用来将多个路径片段拼接成一个完整的路径字符串(常用 __dirname +url 进行拼接)

const path = require('path')
const fs = require('fs')

// 注意:path.join 方法   ../ 会抵消前面的路径
const pathStr = path.join('/a', '/b/c', '../../', './d', 'e')
console.log(pathStr)  // \a\b\d\e

//进行路径拼接时要使用path.join 方法进行拼接 
//__dirname表示当前模块的目录名  常用 __dirname +url 进行拼接
fs.readFile(path.join(__dirname, '/files/1.txt'), 'utf8', function (err, dataStr) {
  if (err) {
    return console.log(err.message);
  }
  console.log(dataStr);
})

3.3获取路径中的文件名

1.path.basename()的语法格式

使用path.basename()方法,可以获取路径中的最后一部分,经常通过这个方法获取路径中的文件名,语法格式如下

path.basename(path[,ext])

参数解读:

  • path<string> 必选参数,表示一个路径的字符串
  • ext<string> 可选参数,表示文件扩展名
  • 返回:<string>表示路径中的最后一部分

代码实例

const path = require('path')

// 定义文件的存放路径
const fpath = '/a/b/c/index.html'

 const fullName = path.basename(fpath)
 console.log(fullName)  //index.html

//basename 获取最后的文件名
const nameWithoutExt = path.basename(fpath, '.html')
console.log(nameWithoutExt)//index

3.4获取路径中的文件扩展名

1.path.extname()的语法格式

使用path.extname()方法,可以获取路径中的扩展名部分,语法格式如下

path.extname(path)

代码实例

const path = require('path')

// 这是文件的存放路径
const fpath = '/a/b/c/index.html'

//path.extname() 获取文件的扩展名
const fext = path.extname(fpath)
console.log(fext)//.html

4.http模块

4.1 什么是http模块

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

导入方式

const http=require('http');

4.2 进一步理解http模块的作用

服务器和普通电脑的区别在于,服务器安装了web 服务器软件,例如: IIS,Apache等。通过安装这些服务器软件就能把一台普通的电脑变成一台web服务器

在Node.js中,我们不需要使用IIS,Apache等这些第三方web服务器软件。直接基于Node.js模块,就可以手写一个服务器软件,从而对外提供web服务

//1.导入http模块
const http=require('http');
//2.创建 web 服务器实例
const server=http.createServer();
//3.为服务器实例绑定 request 事件,监听客户端的请求
server.on('request',function(req,res){
  console.log('Someone visit our web server');
})
//4.启动服务器
server.listen(8080,function(){
  console.log('server running at http://127.0.0.1:8080');
})

4.3 服务器相关的概念

1.IP地址

IP地址就是互联网上每一台计算机的唯一地址,因此IP地址具有唯一性

IP地址的格式:通过用"点分十进制"表示成(a.b.c.d)的形式,其中,a,b,c都是0~255之间的十进制整数。 例如:用点分十进制表示的IP地址(192.168.1.1)

注意:

  • 互联网中每台Web服务器,都有自己的IP地址,例如:可以在Windows终端中运行ping www.baidu.com,即可查到百度服务器的IP地址
  • 在开发期间,自己的电脑就是一台服务器,也是一台客户端,为了方便测试,可以在自己的浏览器中输入127.0.0.1进行访问自己的服务器

2.域名和域名服务器

因为IP地址是一长串数字,不直观,于是人们又发明了另一套字符型的地址方案,即所谓的域名地址

IP地址和域名是一一对应的关系,这份对应关系存放在一种叫做域名服务器(DNS,Domain name server)的电脑中。使用者只需通过好记的域名访问对应的服务器即可,对应的转换工作由域名服务器实现。因此,域名服务器就是提供IP地址和域名之间的转换服务的服务器

注意:

  • 单纯使用IP地址,互联网中的电脑也能够正常工作。但是有了域名会更加方便
  • 127.0.0.1对应的域名是localhost,它们都代表自己的电脑

3.端口号

在一台电脑中,可以运行成千上百个web服务器,每一个web服务器都对应唯一的端口号。客户端发送网络请求,通过端口号,可以被准确的交给对应的web服务进行处理

 注意

  • 每个端口号不能同时被多个web服务器占用
  • 在实际应用中,URL的80端口可以被省略

4.4创建最基本的web服务器

1.创建web服务器的基本步骤

  • 导入http模块
  • 创建web服务器实例
  • 为服务器实例绑定request事件,监听客户端的请求
  • 启动服务器(调用server,lsten(端口号,cb回调))
//1.导入http模块
const http=require('http');
//2.创建 web 服务器实例
const server=http.createServer();
//3.为服务器实例绑定 request 事件,监听客户端的请求
server.on('request',function(req,res){
  console.log('Someone visit our web server');
})
//4.启动服务器 调用server,lsten(端口号,cb回调)
server.listen(80,function(){
  console.log('server running at http://127.0.0.1');
})

2.request事件

req请求对象和res响应对象

只要服务器接收到了客户端的请求,就会带调用server.on()为服务器绑定request事件

如果想在事件处理函数中,访问与客户端相关的数据或属性,可以使用如下方式

//3.为服务器绑定request事件,监听客户端的请求
//  req是请求对象,包含了与客户端相关的数据和属性
server.on('request', (req,res) => {
  //req.url 是客户端请求的 URL 地址
  const url = req.url;
  //req.method 是客户端请求的method 类型
  const method = req.method;
  const str = `Your request url is ${url},and request method is ${method}`;
  console.log(str);
  //res 响应对象 
  //调用res.end()方法 向客户端响应一些内容
  res.end(str)
})

3.解决中文乱码问题

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

通过     res.setHeader('Content-Type', 'text/html;charset=utf-8')  解决乱码问题

server.on('request', (req, res) => {
  // 定义一个字符串,包含中文的内容
  const str = `您请求的 URL 地址是 ${req.url},请求的 method 类型为 ${req.method}`
  // 调用 res.setHeader() 方法,设置 Content-Type 响应头,解决中文乱码的问题
  res.setHeader('Content-Type', 'text/html;charset=utf-8')
  // res.end() 将内容响应给客户端
  res.end(str)
})

4.5 根据不同的url响应不同的html内容

1.核心实现步骤

  1. 获取请求的 url 地址
  2. 设置默认的响应内容404 Not found
  3. 判断用户请求的是否为 / /index.html 首页
  4. 判断用户请求的是否为 /about.html 关于页面
  5. 设置 Content-Type 响应头,防止中文乱码
  6. 使用 res.end() 把内容响应给客户端

 2. 动态响应内容

server.on('request', (req, res) => {
  //1.获取请求的url地址
  const url = req.url;
  //2.设置默认的响应内容为 404 Not found
  let content = '<h1>404 Not found</h1>';
  //根据用户请出地址给出不一样的界面
  if (url === '/' || url === '/index.html') {
    content = '<h1>首页<h1>';              //用户请求的是首页
  } else if (url === '/about.html') {
    content = '<h1>关于页面<h1>';          //用户请求的是关于页面
  }
  //3.设置Content-Type 响应头 防止中文乱码
  res.setHeader('Content-Type', 'text/html; charset=utf-8');
  //4.使用 res.end() 把内容响应给客户端
  res.end(content);
})

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值