Node笔记

一、node概述

1、Chrome 浏览器的v8引擎可以解析JavaScript代码

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

  • 浏览器是 JavaScript 的前端运行环境。

  • Node.js 是 JavaScript 的后端运行环境。

  • Node.js 中无法调用 DOM 和 BOM 等浏览器内置 API

3、Node.js 的学习路径:

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

二、 终端中的快捷键

  1. 使用 ↑ 键,可以快速定位到上一次执行的命令

  1. 使用 tab 键,能够快速补全路径

  1. 使用 esc 键,能够快速清空当前已输入的命令

  1. 输入 cls 命令,可以清空终端

三、 fs 文件系统模块

1、fs 模块是 Node.js 官方提供的、用来操作文件的模块。使用 fs 模块来操作文件,需要先导入

constfs  =require('fs')

2、读取指定文件中的内容

// 导入fs模块
constfs=require('fs')
// 读取内容
fs.readFile('./files/11.txt', 'utf8', function(err, dataStr) {
  if (err) {
    returnconsole.log('读取文件失败!'+err.message)
  }
  console.log('读取文件成功!'+dataStr)
})
  • 参数1:必选参数,字符串,表示文件的路径。

  • 参数2:可选参数,表示以什么编码格式来读取文件。

  • 参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果。

3、向指定的文件中写入内容

// 导入fs模块
constfs=require('fs')
// 写入内容
fs.writeFile('./files/2.txt', 'Hello Node.js', function(err) {
   if (err) {
    returnconsole.log('文件写入失败!'+err.message)
  }
  console.log('文件写入成功!')
})
  • 参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径。

  • 参数2:必选参数,表示要写入的内容

  • 参数3:可选参数,表示以什么格式写入文件内容,默认值是 utf8

  • 参数4:必选参数,文件写入完成后的回调函数

四、path 路径模块

1、把多个路径片段拼接为完整的路径字符串

// 导入path模块
constpath=require('path')
pathStr=path.join('/a', '/b/c', '../../', './d', 'e')
console.log(pathStr)  // \a\b\d\e
  • ...paths <string> 路径片段的序列

  • 返回值: <string>

2、获取路径中的文件名

constpath=require('path')
// 定义文件的存放路径
constfpath='/a/b/c/index.html'
constfullName=path.basename(fpath)
console.log(fullName)
​
constnameWithoutExt=path.basename(fpath, '.html')
console.log(nameWithoutExt)
  • path <string> 必选参数,表示一个路径的字符串

  • ext <string> 可选参数,表示文件扩展名

  • 返回: <string> 表示路径中的最后一部分

3、获取路径中的扩展名

constpath=require('path')
​
// 这是文件的存放路径
constfpath='/a/b/c/index.html'
​
constfext=path.extname(fpath)
console.log(fext)
  • path <string>必选参数,表示一个路径的字符串

  • 返回: <string> 返回得到的扩展名字符串

五、http 模块

1、通过 http 模块提供的 http.createServer() 方法,就能方便的把一台普通的电脑,变成一台 Web 服务器,从而对外提供 Web 资源服务。

六、Express

1、概述

  • Express 是基于 Node.js 平台,快速、开放、极简的 Web 开发框架。

  • Express是node.js中内置模块http的升级版

  • 使用 Express,我们可以方便、快速的创建 Web 网站的服务器或 API 接口的服务器。

2、基本用法

// 1. 导入 express
constexpress=require('express')
// 2. 创建 web 服务器
constapp=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(80, () => {
  console.log('express server running at http://127.0.0.1')
})

3、托管静态资源 express.static()

constexpress=require('express')
constapp=express()
// 在这里,调用 express.static() 方法,快速的对外提供静态资源
// 挂载路径前缀,在访问的时候,需要在路径前面加上/files
app.use('/files', express.static('./files'))
// 不挂载路径前缀
app.use(express.static('./clock'))
app.listen(80, () => {
  console.log('express server running at http://127.0.0.1')
})

4、nodemon

能够监听项目文件的变动,当代码被修改后,nodemon 会自动帮我们重启项目

// 安装nodemon
npmi-gnodemon

5、Express 路由

5.1、概述

在 Express 中,路由指的是客户端的请求与服务器处理函数之间的映射关系。

Express 中的路由分 3 部分组成,分别是请求的类型、请求的 URL 地址、处理函数

5.2、用法

// 一、简单用法
constexpress=require('express')
constapp=express()
​
// 挂载路由
app.get('/', (req, res) => {
  res.send('hello world.')
})
app.post('/', (req, res) => {
  res.send('Post Request.')
})
​
app.listen(80, () => {
  console.log('http://127.0.0.1')
})
​
// 二、创建路由模块
// 这是路由模块
// 1. 导入 express
constexpress=require('express')
// 2. 创建路由对象
constrouter=express.Router()
​
// 3. 挂载具体的路由
router.get('/user/list', (req, res) => {
  res.send('Get user list.')
})
router.post('/user/add', (req, res) => {
  res.send('Add new user.')
})
​
// 4. 向外导出路由对象
module.exports=router
​
constexpress=require('express')
constapp=express()
​
// 1. 导入路由模块
constrouter=require('./03.router')
// 2. 注册路由模块,添加统一的访问前缀/api
app.use('/api', router) // 注意: app.use() 函数的作用,就是来注册全局中间件
app.listen(80, () => {
  console.log('http://127.0.0.1')
})

5.3、路由的匹配过程

  • 按照定义的先后顺序进行匹配

  • 请求类型和请求的URL同时匹配成功,才会调用对应的处理函数

6、Express 中间件

6.1、概述

  • 特指业务流程的中间处理环节。

  • 当一个请求到达 Express 的服务器之后,可以连续调用多个中间件,从而对这次请求进行预处理。

  • Express 的中间件,本质上就是一个 function 处理函数

  • 中间件函数的形参列表中,必须包含 next 参数。而路由处理函数中只包含 req 和 res。

  • next 函数是实现多个中间件连续调用的关键,它表示把流转关系转交给下一个中间件或路由。

6.2、全局生效的中间件

//调用 app.use()
app.use((req, res, next) => {
  console.log('调用了第1个全局中间件')
  next()
})

6.3、 局部生效的中间件

// 1. 定义中间件函数
constmw1= (req, res, next) => {
  console.log('调用了局部生效的中间件')
  next()
}
// 2. 创建路由
app.get('/', mw1, (req, res) => {
  res.send('Home page.')
})

6.4、使用中间件的注意事项

  • 一定要在路由之前注册中间件

  • 客户端发送过来的请求,可以连续调用多个中间件进行处理

  • 执行完中间件的业务代码之后,不要忘记调用 next() 函数

  • 为了防止代码逻辑混乱,调用 next() 函数后不要再写额外的代码

  • 连续调用多个中间件时,多个中间件之间,共享 req 和 res 对象

6.5、中间件分类

应用级别的中间件
// 通过 app.use() 或 app.METHOD() 函数,绑定到 app 实例上的中间件
路由级别的中间件
// 绑定到 express.Router() 实例上的中间件
错误级别的中间件
// 错误级别的中间件,必须注册在所有路由之后
// 2. 定义错误级别的中间件,捕获整个项目的异常错误,从而防止程序的崩溃
app.use((err, req, res, next) => {
  console.log('发生了错误!'+err.message)
  res.send('Error:'+err.message)
})
Express 内置的中间件
// 解析表单中的 JSON 格式的数据
app.use(express.json())
// 解析表单中的 url-encoded 格式的数据
app.use(express.urlencoded({ extended: false }))
// 快速托管静态资源
app.use(express.static())
第三方的中间件
// 1. 导入解析表单数据的中间件 body-parser
constparser=require('body-parser')
// 2. 使用 app.use() 注册中间件
app.use(parser.urlencoded({ extended: false }))  // app.use(express.urlencoded({ extended: false }))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值