从0到1完成一个Node后端(express)项目(四、路由、模块化、中间件、跨域)

news2024/11/28 0:52:54

往期

从0到1完成一个Node后端(express)项目(一、初始化项目、安装nodemon)
从0到1完成一个Node后端(express)项目(二、下载数据库、navicat、express连接数据库)
从0到1完成一个Node后端(express)项目(三、写接口、发起请求

路由

什么是路由呢

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

大白话地说

在我们express里,路由就是请求

我们已经接触了路由了,我们之前写的接口,完成的GET、POST请求都是路由

express中的路由分3部分组成,分别是请求的类型,请求的URL地址,处理函数。格式如下:

app.method(path,handler) 
/**
method:请求方式
path:请求的URL地址
handler:回调函数,处理请求与响应
*/

这不就是我们之前写的嘛,就是这么简单

模块化

我们之前的路由(也就是接口),我们全都写在了app.js里面
这样的话,我们不同的业务场景有很多,我们全写在一起会有两个问题

  1. 代码冗余、可不方便观看
  2. 模块化程度低,不方便查找和维护

所以我们对路由进行模块化

我们在根目录下建立router文件夹,并建立index.js

在这里插入图片描述

const express = require('express')
// 创建路由对象
const router = express.Router()
// 创建具体的路由
router.get('/user/list', (req, res) => {
    res.send('user/list接口调用成功')
})
router.post('/me/list', (req, res) => {
    res.send('me/list接口调用成功')
})
// 向外导出对象,做到模块化
module.exports = router

在app.js引用

在这里插入图片描述
在这里插入图片描述
使用成功

中间件

中间件(Middleware)就是指业务流程的中间处理环节

中间件这个非常好理解,就是在请求我们的接口的时候,我们需要对请求做一些处理,比如过滤掉一些危险啊,过滤掉不良的内容,等等,达到预处理

next()

next函数,可以说是我们唯一见过的新的东西,它会配合我们的中间件使用
跟它的名字一下,next(往下走),就是我们走完中间件的逻辑之后,我们就可以往下走啦

使用中间件

在这里插入图片描述

app.use((req, res, next) => {
    const time = Date.now()
    req.start = time
    next()
})
app.get('/login', (req, res) => {
    res.send('登陆成功' + req.start)
})

多个中间件

很简单,因为我们的中间件共用一个req和res

在这里插入图片描述
当我们请求接口成功
在这里插入图片描述
发现成功

局部中间件

局部就是不用app.use去调用的中间件,我们需要用的时候拿来用即可

const m1 = (req, res, next) => {
    console.log('first');
    next()
}
const m2 = (req, res, next) => {
    console.log('second');
    next()
}
app.get('/login', m1, m2, (req, res) => {
    res.send('登陆成功')
})

在这里插入图片描述
成功

跨域

安装cors

npm i cors

使用require导入中间件

const cors = require(‘cors’)

使用app.use(第三方中间件)注册并使用中间件

app.use(cors())

注意跨域要在路由之前配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/166728.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分页查询数据重复的问题 (分页时数据库插入数据导致)

参考:https://blog.csdn.net/desongzhang/article/details/124941189参考之后 自己遇到的坑解决办法一、问题描述分页时,同时在数据库中添加数据,导致第n页和第n1页有部分数据重复(重复条数和查询分页时的添加的数据量有关)二、解决办法分页的…

商业智能 BI 跟业务系统的思维差异,跨越和提升

各行业都已开始进入数据时代,但很多企业还是分不清商业智能 BI 跟一般的业务信息化系统定位、用户、思维层面上的差异。 在企业的 IT 信息化规划中,基础的业务系统建设一定是走在前面的,有了这些系统基础,才会有数据的积累&#…

SH-PEG-Silane巯基-聚乙二醇-硅烷试剂简介Silane-PEG-SH

SH-PEG-Silane巯基-聚乙二醇-硅烷 外观:固体或液体,取决于分子量大小。 PEG可选分子量: 1000,2000,3400,5000,10000 溶剂: 溶于DMSO,DMF,DCM,溶于水。 纯度:>95% 保存:-20℃&#xff0c…

目标检测模型设计准则 | YOLOv7参考的ELAN模型解读,YOLO系列模型思想的设计源头

转载:https://mp.weixin.qq.com/s/5SjQvRqRct6ClpE2eEcdkw设计高效、高质量的表达性网络架构一直是深度学习领域最重要的研究课题。当今的大多数网络设计策略都集中于如何集成从不同层提取的特征,以及如何设计计算单元来有效地提取这些特征,从…

Ubuntu22.04 设置静态IP

1.查看网卡名称及IP ip addr 网卡名称:ens33 IP:192.168.44.130 2.修改配置文件 在 /etc/netplan/ 目录下找到配置文件 *.yaml ,修改为 network:version: 2#renderer: NetworkManagerethernets:ens33:addresses: [192.168.44.130/24]dhcp4: nooptio…

Chrome扩展程序(插件),用你开发的脚本在浏览器上随心所欲

Chrome扩展程序(插件),用你开发的脚本在浏览器上随心所欲Chrome插件的文件结构Hello_World编写利用JavaScript实现Hello Everything灵活运用浏览器的存储storageoptions_Page基本用法电脑发通知 - Notifications的应用普通界面右键菜单 - con…

Android 9.0系统源码_SystemUI(八)PhoneWindow更新状态栏和导航栏背景颜色的流程解析

前言 状态栏与导航栏属于SystemUi的管理范畴,虽然界面的UI会受到SystemUi的影响,但是,APP并没有直接绘制SystemUI的权限与必要。APP端之所以能够更改状态栏的颜色、导航栏的颜色,其实还是操作自己的View更改UI。可以这么理解&…

【Linux】探索缓冲区的概念 | Git 三板斧 | 实现简易进度条

爆笑教程,只送有缘人 👉 《看表情包学Linux》 💭 写在前面:本章我们先对缓冲区的概念进行一个详细的探究,之后会带着大家一步步去编写一个简陋的 "进度条" 小程序,过程还是挺有意思的&#xff0c…

EMQX 在 Kubernetes 中如何进行优雅升级

背景 为了降低 EMQX 在 Kubernetes 上的部署、运维成本,我们将一些日常运维能力进行总结、抽象并整合到代码中,以 EMQX Kubernetes Operator 的方式帮助用户实现 EMQX 的自动化部署和运维。 此前,EMQX Kubernetes Operator v1beta1、v1beta…

React--》如何在React中创建TypeScript项目并使用?

目录 React中创建TS项目 TS目录结构 React函数组件类型 React类组件类型 如果你已经掌握了TS中基础类型、高级类型的使用,还想在前端项目中更深一层的使用TS,还需要掌握React、Vue、Angular等框架和框架提供的API,懂得如何在框架中使用TS…

【ROS】—— 机器人导航(仿真)—导航实现(十八)[重要][重要][重要]

文章目录前言准备条件1. 导航实现01_SLAM建图1.1 gmapping简介1.2 gmapping节点说明1.3 gmapping使用1.3.1 编写gmapping节点相关launch文件1.3.2 执行2. 导航实现02_地图服务2.1 map_server简介2.2 map_server使用之地图保存节点(map_saver)2.2.1 map_saver节点说明2.2.2 地图…

你是真的“C”——函数递归详解汉诺塔+青蛙跳台阶

函数递归详解汉诺塔青蛙跳台阶问题😎前言🙌函数递归之汉诺塔详解分析🙌汉诺塔问题的简介😊汉诺塔的移动图解😊汉诺塔具体的移动过程展示😊汉诺塔的难处所在:😊函数递归之青蛙跳台阶详…

从头安装gdal库(Linux环境下的Python版)

目录前言GDAL安装SWIG安装proj 安装sqlite安装pkg-config 安装其他报错No package libtiff-4 foundPackage liblzma, required by libtiff-4, not foundPackage libjpeg, required by libtiff-4, not foundPackage zlib, required by libtiff-4, not foundchecking for curl-co…

Windows下IIS部署网站流程

IIS Internet information service 是一个web服务器 1. IIS用于windows系统 2.apache用于Linux系统,JAVA的web服务器 3.Nginx用于Linux,负责负载均衡,反向代理 安装完IIS之后,去更改DNS的指向。 DNS指向:IP 和 域名 的…

Dopamine-PEG-N3,多巴胺聚乙二醇叠氮 科研试剂用于点击化学

中文:多巴胺-聚乙二醇-叠氮 英文:Dopamine-PEG-N3,DOPA-PEG-azide 存储条件:-20C,避光,避湿 用 途:仅供科研实验使用,不用于诊治 外观: 固体或粘性液体,取决于分子量 …

3D游戏引擎系统源码C++本科毕业设计,C++ 3D引擎源码,渲染系统使用的OpenGL 及 OpenGL ES

Effective 3D Engine 渲染系统使用的OpenGL 及 OpenGL ES,Windows上OpenGL ES使用AMD的ES模拟器。 环境部署 完整代码下载地址:3D游戏引擎系统源码C本科毕业设计 Win32环境配置 编辑器 将proj_win32/RenderSystem/gles_renderSystem/GLES/dll 中的d…

【web】微信小程序笔记小结(模板与配置)

来源:黑马程序员前端微信小程序开发教程 目录 I. WXML 模板语法 ① 数据绑定 ※※ 基本原则 ※※ 在 data 中定义数据 ※※ 在 WXML 中使用数据 ※※※※ Mustache 语法的格式 ※※※※ Mustache 主要应用场景 1)动态绑定内容 2)动…

测试篇(二): 如何合理的创建bug、bug的级别、bug的生命周期、跟开发产生争执怎么办

目录一、如何合理的创建bug二、bug的等级三、bug的生命周期四、和开发产生争执怎么办一、如何合理的创建bug 创建Bug的目的就是为了能够让其他人可以尝试复现 一个合格的bug应该包含以下一个要素: 发现问题的版本 例如Web程序对应的浏览器版本,或某个应…

AutoLISP 演练(一)

一、输入左下角点、矩形宽、矩形高后,自动的将图形依所给的条件画出二、变量约定本程序所需的AutoLisp功能函数(setq 变量名 变量值) ⬅ 设定变量值(getpoint [基点] [提示]) ⬅ 请求参考基点输入一个点坐标(getreal […

PyTorch中contiguous、view、Sequential、permute函数的用法

在pytorch中,tensor的实际数据以一维数组(storage)的形式存储于某个连续的内存中,以“行优先”进行存储。 1. tensor的连续性 tensor连续(contiguous)是指tensor的storage元素排列顺序与其按行优先时的元素…