node整理学习(三)

nodemon

在编写node.js文件时,如果频繁改动js文件,就需要手动close掉,然后再重新启动,下载nodemon,可以监听项目的改动,帮我们重启项目

express学习

什么是express?

官方概念:Express是基于Node.js平台,快速、开放、极简的web开发框架

通俗的讲:Express和Node.js内置的http模块一样,是专门用来创建web服务器的

本质:是一个第三方包,快速创建web服务器

安装express:npm i express

创建一个express服务

// 导入express
const express = require('express')

// 创建web服务器
const app = express()

// 调用app.listen(端口号,启动成功后的回调函数),启动服务器
app.listen(80, () => {})

express处理GET\POST请求,以及处理参数

// 导入express
const express = require('express')

// 创建web服务器
const app = express()

// 监听客户端的GET请求
app.get('/user', (req, res) => {
    // req 请求对象
    // res 响应对象
    // 通过 req.query获取get请求内容
    const data = res.query
    // 通过 res.send()向客户端响应内容
    // 将query参数响应给客户端
    res.send(data)
})

// 监听客户端的POST请求
app.post('/user/:id', (req, res) => {
    // req 请求对象
    // res 响应对象
    // 通过 req.params获取post请求内容
    const data = res.params
    // 通过 res.send()向客户端响应内容
    // 将params参数响应给客户端
    res.send(data)
})

// 调用app.listen(端口号,启动成功后的回调函数),启动服务器
app.listen(80, () => {})

express中的路由

为了对路由进行模块化管理,不适宜把所有的路由都挂载在app上

路由文件

// 导入express
const express = require('express')


// 创建路由对象
const router = express.Router()


// 监听客户端的GET请求
router.get('/user', (req, res) => {
    res.send('get response')
})

// 监听客户端的POST请求
router.post('/user/:id', (req, res) => {
    res.send('post response')
})

// 向外导出路由对象
module.exports = router

主文件

// 导入express
const express = require('express')

// 导入路由模块
const router = require('./router')

// 创建web服务器
const app = express()

// 注册路由模块
// app.use就是来注册全局中间件的
app.use(router)

// 还可以给路由模块添加统一前缀
// /api默认给所有接口添加前缀
app.use('/api',router)

// 调用app.listen(端口号,启动成功后的回调函数),启动服务器
app.listen(80, () => {})

express中间件

1、当一个请求到达express时,可以连续调用多个中间件,从而对这次请求做预处理

2、express本质是一个函数

全局中间件

1、客户端发起的任何请求,到达服务器之后,都会触发中间件,叫做全局生效的中间件

2、调用app.use(中间件函数)即可生效

3、多个中间件之间共享一份req和res,基于这个特性,可以在中间件中,对req和res做统一的处理

// 导入express
const express = require('express')

// 创建web服务器
const app = express()

// 定义一个中间件函数
const mv = (req, res, next) => {
    console.log('这是一个简单的中间件')
    next()
}

app.use(mv)

// 定义一个get函数
// 每次调用该函数时都会先调用mv中间件函数
app.get('/', (req, res) => {
    res.send('data 内容')
})

// 调用app.listen(端口号,启动成功后的回调函数),启动服务器
app.listen(80, () => {})

局部中间件

1、不使用app.use()定义的中间件,叫做局部生效的中间件

// 导入express
const express = require('express')

// 创建web服务器
const app = express()

// 定义一个中间件函数
const mv = (req, res, next) => {
    console.log('这是一个简单的中间件1')
    next()
}

const mv2 = (req, res, next) => {
    console.log('这是一个简单的中间件2')
    next()
}


// 定义一个get函数
// 每次调用该函数时都会先调用mv中间件函数
app.get('/', mv, mv2, (req, res) => {
    res.send('data 内容')
})

app.get('/', [mv, mv2], (req, res) => {
    res.send('data 内容')
})

// 调用app.listen(端口号,启动成功后的回调函数),启动服务器
app.listen(80, () => {})

中间件注意事项

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

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

3、执行完中间件之后不要忘记调用next()

4、调用next()之后,不要再写代码

5、连续调用多个中间件,多个中间件之间共享req和res

中间件分类

应用级别中间件:使用app.use、app.get()、app.post()绑定到app实例上的中间件

路由级别中间件:绑定到express.Router()实例上的中间件

错误级别中间件

1、错误级别的中间件专门用来捕获整个项目中发生的异常信息,从而防止项目异常崩溃

2、错误级别的中间件有四个参数,(err, req, res, next)=> {}

express 内置中间件

1、express.static快速托管静态资源的中间件

2、express.json解析JSON格式的请求体数据

3、express.urlencoded解析URL-encoded格式的请求体数据

第三方中间件

跨域

cors相关的响应头

Access-Control-Allow-Origin允许什么域名访问,需要使用res.setHeader('Access-Control-Allow-Origin', 需要跨域的域名)

Access-Control-Allow-Headers:如果需要设置额外的请求头,需要使用res.setHeader('Access-Control-Allow-Headers', 需要设置的请求头)设置

Access-Control-Allow-Methods:使用res.setHeader('Access-Control-Allow-Methods', 需要设置的请求方法)

相关推荐

  1. node整理学习

    2024-03-27 18:44:06       39 阅读
  2. node整理学习(一)

    2024-03-27 18:44:06       40 阅读
  3. Node.js】笔记整理 1 - 基础知识

    2024-03-27 18:44:06       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-27 18:44:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-27 18:44:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-27 18:44:06       82 阅读
  4. Python语言-面向对象

    2024-03-27 18:44:06       91 阅读

热门阅读

  1. 海思 Hi3403V100 简介

    2024-03-27 18:44:06       85 阅读
  2. Idea与DataGrip各版本通用破解码,无需脚本。

    2024-03-27 18:44:06       110 阅读
  3. 深入理解 LVS:配置与应用详解

    2024-03-27 18:44:06       46 阅读
  4. 单位里,永远要记住这些残忍的处事之道!

    2024-03-27 18:44:06       34 阅读
  5. Linux安装程序

    2024-03-27 18:44:06       43 阅读
  6. Linux UVC Gadget Driver开发

    2024-03-27 18:44:06       40 阅读
  7. c#委托案例

    2024-03-27 18:44:06       38 阅读
  8. SpringBoot-注解:@Async 使用

    2024-03-27 18:44:06       43 阅读
  9. springBoot实现热部署

    2024-03-27 18:44:06       30 阅读
  10. 排序问题HJ37 统计每个月兔子的总数

    2024-03-27 18:44:06       35 阅读
  11. Nginx(面试)

    2024-03-27 18:44:06       36 阅读
  12. Ansible Playbook 精髓:书写与应用全攻略

    2024-03-27 18:44:06       40 阅读