node.js

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

2.注意:
① 浏览器是 JavaScript 的前端运行环境。
② Node.js 是 JavaScript 的后端运行环境。
Node.js 中无法调用DOM 和 BOM 等 浏览器内置 API。

1.2 Node.js 简介

1. 什么是 Node.js

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

3.Node.js 可以做什么

Node.js 作为一个 JavaScript 的运行环境,提供了基础的功能和API

2. fs 文件系统模块

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

⚫ fs.readFile() 方法,用来读取指定文件中的内容

// 1. 导入 fs 模块,来操作文件
const fs = require('fs')

// 2. 调用 fs.readFile() 方法读取文件
//    参数1:读取文件的存放路径
//    参数2:读取文件时候采用的编码格式,一般默认指定 utf8
//    参数3:回调函数,拿到读取失败和成功的结果  err  dataStr
fs.readFile('./files/11.txt', 'utf8', function(err, dataStr) {
  // 2.1 打印失败的结果
  // 如果读取成功,则 err 的值为 null
  // 如果读取失败,则 err 的值为 错误对象,dataStr 的值为 undefined
  console.log(err)
  console.log('-------')
  // 2.2 打印成功的结果
  console.log(dataStr)
})

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

/1. 导入 fs 文件系统模块
const fs = require('fs')

// 2. 调用 fs.writeFile() 方法,写入文件的内容
//    参数1:表示文件的存放路径
//    参数2:表示要写入的内容
//    参数3:回调函数
fs.writeFile('./files/3.txt', 'ok123', 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() 方法,用来将多个路径片段拼接成一个完整的路径字符串

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

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

// fs.readFile(__dirname + '/files/1.txt')
//__dirname, 指的是当前路径

fs.readFile(path.join(__dirname, './files/1.txt'), 'utf8', function(err, dataStr) {
  if (err) {
    return console.log(err.message)
  }
  console.log(dataStr)
})

⚫ path.basename() 方法,用来从路径字符串中,将文件名解析出来

const path = require('path')

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

//没有扩展名
const nameWithoutExt = path.basename(fpath, '.html')
console.log(nameWithoutExt)
// 包含扩展名
const nameHaveExt = path.basename(fpath)
console.log(nameHaveExt);

⚫ extname( )方法,用来获取文件的扩展名

const path = require('path')

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

const fext = path.extname(fpath)
console.log(fext)

  1. 案例的两个注意点

    ① fs.writeFile() 方法只能用来创建文件,不能用来创建路径
    ② 重复调用 fs.writeFile() 写入同一个文件,新写入的内容会覆盖之前的旧内容

day2

4.http 模块

4.1 什么是 http 模块

http 模块是 Node.js 官方提供的、用来创建web 服务器的模块。

4.2 创建最基本的 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. req 请求对象 req 是请求对象,包含了与客户端相关的数据和属性

const http = require('http')
const server = http.createServer()
// 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.end() 方法,向客户端响应一些内容
  // res.end(str)
})
server.listen(8081, () => {
  console.log('server running at http://127.0.0.1:8081')
})
//结果  Your request url is /, and request method is GET

4.4. res 响应对象 res是响应对象,包含了与服务器相关的属性和数据

const http = require('http')
const server = http.createServer()
  // req 是请求对象,包含了与客户端相关的数据和属性
server.on('request', (req, res) => {
  // res是响应对象,包含了与服务器相关的属性和数据
  const str = `Your request url is ${url}, and request method is ${method}`
  // res.end() 方法的作用:
  // 向客户端发送指定的内容,并结束这次请求的处理过程
   res.end(str)
})
server.listen(8081, () => {
  console.log('server running at http://127.0.0.1:8081')
})

4.5 解决中文乱码问题

const http = require('http')
const server = http.createServer()

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)
})

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

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

2. IP地址和域名是一一对应的关系

注意:
① 单纯使用 IP 地址,互联网中的电脑也能够正常工作。但是有了域名的加持,能让互联网的世界变得更加方便。
② 在开发测试期间, 127.0.0.1对应的域名是localhost,它们都代表我们自己的这台电脑,在使用效果上没有任何区别

3. 端口号

注意: ① 每个端口号不能同时被多个 web 服务占用

​ ② 在实际应用中,URL 中的 80 端口可以被省略。

1. 模块化的基本概念

1.1 什么是模块化

模块化概念: 模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说,模块是可组 合、分解和更换的单元。

1.2 把代码进行模块化拆分的好处:
① 提高了代码的复用性
② 提高了代码的可维护性
③ 可以实现按需加载

2.Node.js 中的模块化
2.1 Node.js 中模块的分类
Node.js 中根据模块来源的不同,将模块分为了3 大类,分别是:
⚫ 内置模块(内置模块是由 Node.js 官方提供的,例如fs、path、http 等)
⚫ 自定义模块(用户创建的每个.js 文件,都是自定义模块
⚫ 第三方模块(由第三方开发出来的模块,并非官方提供的内置模块,也不是用户创建的自定义模块,使用前需要先下载

2. Node.js 中的模块化

2.1 加载模块 用require() 方法

// 1. 加载内置的 fs 模块
const fs = require('fs')
// 2. 加载用户自定义模块
const custom = require('custom')
// 3. 加载第三方模块
const monent = require('monent')

2.2 什么是模块作用域

和函数作用域类似,在自定义模块中定义的变量、方法等成员只能在当前模块内被访问这种模块级别的访问限制,叫做模块 作用域。

​ 模块作用域的好处 防止了全局变量污染的问题

2.4 向外共享模块作用域中的成员

  1. module.exports 对象
    在自定义模块中,可以使用 module.exports 对象,将模块内的成员共享出去,供外界使用。
    外界用 require() 方法导入自定义模块时得到的就是module.exports 所指向的对象。
{ nickname: '小黑', sayHi: [Function: sayHi] }   //最终运行结果
  1. 共享成员时的注意点
    1.使用 require() 方法导入模块时,导入的结果,永远以module.exports 指向的对象为准。

2. 默认情况 下,exports 和module.exports 指向同一个对象。最终共享的结果,还是以module.exports 指向的对象为准。

3. 注意:为了防止混乱,建议大家不要在同一个模块中同时使用exports 和 module.exports

3. npm与包

3.3 包管理配置文件
npm 规定,在项目根目录中,必须提供一个叫做package.json的包管理配置文件。用来记录与项目有关的一些配置 信息。

  1. 初次装包后多了哪些文件
    初次装包完成后,在项目文件夹下多一个叫做node_modules 的文件夹和package-lock.json 的配置文件。

day3

  1. 什么是 Express
    官方给出的概念:Express 是基于 Node.js 平台,快速、开放、极简的Web 开发框架。
    通俗的理解:Express 的作用和 Node.js 内置的 http 模块类似,是专门用来创建Web 服务器的。
    Express 的本质:就是一个npm 上的第三方包,提供了快速创建Web 服务器的便捷方法。

  2. 进一步理解 Express

  • 思考:不使用Express 能否创建 Web 服务器?
    答案:能,使用 Node.js 提供的原生 http 模块即可。
  • 思考:既生瑜何生亮(有了http 内置模块,为什么还有用 Express)?
    答案:http 内置模块用起来很复杂,开发效率低;Express 是基于内置的 http 模块进一步封装出来的,能够极大的提高开发效率。
  • 思考:http 内置模块与 Express 是什么关系?
    答案:类似于浏览器中 Web API 和 jQuery 的关系。后者是基于前者进一步封装出来的。

3. 使用 express 创建最基本的服务器

// 1. 导入 express
const express = require('express')
// 2. 创建 web 服务器
const app = express()

// 4. 监听客户端的 GET 和 POST 请求,并向客户端响应具体的内容
app.get('/user', (req, res) => {
  // 调用 express 提供的 res.send() 方法,向客户端响应一个 JSON 对象
  res.send({ name: 'zs', age: 20, gender: '男' })
})
app.post('/user', (req, res) => {
  // 调用 express 提供的 res.send() 方法,向客户端响应一个 文本字符串
  res.send('请求成功')
})
app.get('/', (req, res) => {
  // 通过 req.query 可以获取到客户端发送过来的 查询参数
  // 注意:默认情况下,req.query 是一个空对象
  console.log(req.query)
  res.send(req.query)
})
// 注意:这里的 :id 是一个动态的参数
app.get('/user/:ids/:username', (req, res) => {
  // req.params 是动态匹配到的 URL 参数,默认也是一个空对象
  console.log(req.params)
  res.send(req.params)
})

// 3. 启动 web 服务器
app.listen(8080, () => {
  console.log('express server running at http://127.0.0.1:8080')
})

1.3 托管静态资源

  1. express.static()
    express 提供了一个非常好用的函数,叫做 express.static(),通过它,我们可以非常方便地创建一个静态资源服务器,

  2. Express 路由
    2.1 路由的概念

  3. 什么是路由
    广义上来讲,路由就是映射关系。

在 Express 中,路由指的是客户端的请求与服务器处理函数之间的映射关系。
Express 中的路由分3 部分组成,分别是请求的类型、请求的URL 地址、处理函数,格式如下:

const express = require('express')
const app = express()

// app.use('/files', express.static('./files'))

// 1. 导入路由模块
const router = require('./03.router')
// 2. 注册路由模块
app.use('/api', router)

// 注意: app.use() 函数的作用,就是来注册全局中间件

app.listen(80, () => {
  console.log('http://127.0.0.1')
})

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值