Node.JS - 基础(Express)
目录
A. 简介
B. 下载,安装
C. 启动服务,查看文件结构

A. 简介
Express 是一个基于 Node.js 平台的极简、灵活的 Web 应用开发框架,它提供了一系列强大的功能来构建 Web 应用程序和 API。
一、Express 的基本特点
- 简洁的路由系统:
- Express 的路由系统允许开发者轻松地定义不同的 HTTP 请求路径和对应的处理函数。
- 中间件支持:
- 中间件是在请求和响应处理过程中的函数,它们可以执行各种任务,如日志记录、请求解析、身份验证等。Express 允许轻松地添加和使用中间件。
改核心请求处理逻辑的情况下,添加各种通用的功能模块,提高了代码的可扩展性和可维护性。
二、Express 在 Web 应用开发中的作用
- 快速构建 Web 应用和 API:
- Express 提供了一套简洁而高效的工具集,使得开发者能够快速搭建 Web 应用程序的基础架构。通过定义路由和处理函数,可以快速响应不同的 HTTP 请求并返回相应的内容。例如,在构建一个简单的博客应用时,可以使用 Express 定义文章列表页面、文章详情页面、评论提交等不同的路由和处理逻辑。对于构建 API 来说,Express 也非常方便.
- 与前端框架集成:
- Express 可以很好地与前端框架(如 React、Vue.js 等)进行集成。它可以作为后端服务器,为前端应用提供数据接口和服务。例如,在一个使用 Vue.js 的单页应用(SPA)项目中,Express 可以作为后端 API 服务器,提供用户认证、数据存储和获取等服务。前端应用通过 AJAX 请求与 Express 服务器的 API 进行通信,获取所需的数据并更新页面。
三、Express 的优势与应用场景
-
优势:
- 灵活性:Express 具有高度的灵活性,开发者可以根据项目需求选择和组合不同的中间件和插件。例如,可以选择不同的模板引擎(如 Pug、EJS 等)来生成动态的 HTML 页面,也可以选择不同的数据库驱动和 ORM(Object-Relational Mapping)库来与数据库进行交互。这种灵活性使得 Express 适用于各种类型的 Web 应用开发,从简单的静态网站到复杂的企业级应用都能胜任。
- 轻量级:与一些大型的全栈框架相比,Express 是轻量级的,它只提供了核心的 Web 应用开发功能,不包含过多的额外功能和复杂性。这使得开发者能够更好地理解和控制框架的行为,同时也减少了项目的依赖和资源占用。对于一些资源受限的环境或需要快速开发的小型项目来说,Express 的轻量级特性是一个很大的优势。
- 社区支持和丰富的插件生态:Express 拥有庞大的社区和丰富的插件生态系统。开发者可以在社区中找到大量的教程、示例代码和解决方案,遇到问题时能够快速得到帮助。同时,各种功能的插件(如身份验证插件、日志插件等)使得开发者可以很容易地为应用程序添加额外的功能,而不需要从头开始编写代码。
-
应用场景:
- Web 应用开发:无论是构建企业内部的管理系统、电子商务网站还是社交网络平台等,Express 都可以作为后端服务器框架提供强大的支持。例如,在一个电商网站中,Express 可以处理用户注册和登录、商品展示和搜索、购物车管理、订单处理等各种业务逻辑,同时与数据库进行交互来存储和获取数据。
- API 开发:随着前后端分离的开发模式越来越流行,Express 在构建 RESTful API 和 GraphQL API 等方面得到了广泛的应用。许多移动应用和前端单页应用都依赖于后端提供的 API 来获取数据和实现业务功能。例如,一个移动天气应用可以通过调用 Express 构建的天气 API 来获取实时的天气数据,并在移动应用中展示给用户。
- 实时应用:对于需要实时数据更新和交互的应用,如在线聊天应用、实时协作工具等,Express 可以与 WebSocket 等技术结合使用,实现实时的双向通信。例如,在一个在线聊天应用中,Express 可以作为服务器端的基础框架,处理用户的连接请求,同时使用 WebSocket 来实现实时的消息推送和接收,使得用户能够实时看到其他用户发送的消息。
总之,Express 作为一个功能强大且灵活的 Node.js Web 应用开发框架,在 Web 应用开发、API 开发和实时应用等领域都有着广泛的应用和重要的作用。它的特点和优势使得开发者能够高效地构建各种类型的网络应用程序
B. 下载,安装
选择文件夹输入下面命令, 然后一路空格
npm init

就会在当前文件 创建一个 package.json

然后导入框架
npm install express

会生成一个node_moodules文件夹,里边放着我们引用的第三方的库
创建启动文件

要和配置文件里面的名字相同
const express = require('express')
const app = express()app.get('/',(req,res)=>{res.send('hello,world')
})const PORT = 3000app.listen(PORT,()=>{console.log(`express start in ${PORT}`)
})
编写代码
启动
node app.js


C. 启动服务,查看文件结构
npm start
my-express-app/
├── app.js
├── package.json
├── package-lock.json
├── public/
│ ├── css/
│ │ └── styles.css
│ ├── images/
│ │ └── logo.png
│ └── js/
│ └── script.js
├── routes/
│ ├── index.js
│ └── users.js
└── views/├── index.ejs└── layout.ejs
一、顶层文件和目录
app.js:- 这是应用程序的主要入口文件。在这里,你会初始化 Express 应用,配置中间件,定义路由,以及设置应用的监听端口等。例如:
const express = require('express');const app = express();const port = 3000;// 配置中间件、路由等app.listen(port, () => {console.log(`Server running at port ${port}`);});
package.json和package-lock.json:package.json定义了项目的元数据,包括项目名称、版本、依赖项等。它还包含了一些脚本命令,用于项目的开发、测试和部署等操作。package-lock.json是在安装依赖项时自动生成的文件,它准确记录了安装的每个依赖项的版本和依赖关系树,以确保在不同环境中安装的一致性。
二、public 目录
css文件夹:
- 用于存放 CSS 样式文件。例如
styles.css可以包含应用程序的全局样式定义,用于美化网页的外观。images文件夹:
- 存储项目中使用的图片资源,如
logo.png可能是应用程序的标志图片。js文件夹:
- 放置 JavaScript 脚本文件。比如
script.js可能包含一些客户端脚本,用于增强网页的交互性等功能。
三、routes 目录
index.js:- 通常定义了应用程序的默认路由或首页路由。例如,处理根路径(
/)的请求,可能会渲染首页视图等操作。
- 通常定义了应用程序的默认路由或首页路由。例如,处理根路径(
const express = require('express');const router = express.Router();router.get('/', (req, res) => {res.render('index'); // 假设使用了视图引擎,渲染 index 视图});module.exports = router;
users.js:- 可以定义与用户相关的路由,比如用户注册、登录、用户信息管理等路由。例如:
const express = require('express');const router = express.Router();router.post('/register', (req, res) => {// 处理用户注册的逻辑});router.post('/login', (req, res) => {// 处理用户登录的逻辑});module.exports = router;
四、views 目录
index.ejs:- 这是一个视图文件,可能是应用程序的首页视图模板。例如,如果使用 EJS 模板引擎,这个文件可以包含 HTML 结构以及 EJS 的语法,用于动态地插入数据到网页中。
<!DOCTYPE html><html><head><title>My App</title><link rel="stylesheet" href="/css/styles.css"></head><body><h1>Welcome to My App</h1><% if (user) { %><p>Hello, <%= user.name %>!</p><% } else { %><p>Please log in or register.</p><% } %></body></html>
layout.ejs:- 布局视图文件,它可以定义整个应用程序页面的通用结构,其他视图可以继承这个布局。例如,它可能包含网页的头部、底部等通用部分,中间的内容部分可以在其他视图中动态填充。
<!DOCTYPE html><html><head><title><%= title %></title><link rel="stylesheet" href="/css/styles.css"></head><body><header><nav><a href="/">Home</a><a href="/users">Users</a></nav></header><main><%= body %></main><footer>© 2024 My App</footer></body></html>
当然,实际的 Express 项目文件结构可以根据项目的具体需求和规模进行调整和扩展。但这个基本的结构提供了一个良好的起点,有助于组织和管理 Express 应用程序的代码和资源。
相关文章:
Node.JS - 基础(Express)
目录 A. 简介 B. 下载,安装 C. 启动服务,查看文件结构 A. 简介 Express 是一个基于 Node.js 平台的极简、灵活的 Web 应用开发框架,它提供了一系列强大的功能来构建 Web 应用程序和 API。 一、Express 的基本特点 简洁的路由系统: Express 的路由系…...
I/O复用
I/O复用使得程序能够同时监听多个文件描述符,这对提高程序的性能至关重要。 举个例子: 就好比你天天玩手机,你妈为了监控你,在你房间安装了一个监控,这个监控可以实时监控你的一举一动,并上传到你妈手机上…...
【验证可用】解决安装SQL Server数据库时,报错“启用 windows 功能 NetFx3 时出错,错误代码:-2146498298......“的问题
目录 背景一. 报错信息1.1 报错的图片信息1.2 报错的文字信息 二. 解决报错2.1 下载 NetFx3.cab 文件2.2 执行命令 三. SQL Server 修复安装 背景 一次在阿里云服务器安装 SQL Server 2012时,系统报错了,导致安装进行不下去…通过在网上查找了多种解决方…...
STM32的SDIO接口详解
目录 1. 定义与兼容性 2. SDIO时钟 3. SDIO命令与响应 4. SDIO块数据传输 5. SDIO控制器的硬件结构 6.代码实现 1.SD初始化 2.测试SD卡的读取 3.测试SD卡的写入 STM32的SDIO(Secure Digital Input/Output,安全数字输入输出)接口是一…...
docker容器常用指令,dockerfile
docker:容器,主要是解决环境迁移的问题,将环境放入docker中,打包成镜像。 docker的基本组成:镜像(image),容器(container),仓库(repository)。镜像相当于类,容器相当于类的实例对象…...
C语言学习笔记 Day11(指针--下)
Day11 内容梳理: 目录 Chapter 7 指针 7.6 指针 & 函数 (1)形参改变实参的值 (2)字符数组作为函数参数 1)合并字符串 2)删掉字符串中空格 (3)指针作为函数返…...
(24)(24.2) Minim OSD快速安装指南(二)
文章目录 前言 6 MinimOSD-extra NG 7 替代硬件 前言 本文简要介绍了如何连接电路板。有关更多详细说明,请参阅 MinimOSD 项目维基(MinimOSD Project wiki)。 6 MinimOSD-extra NG 该项目位于此处(here);文档位于此处(here);支撑线位于此…...
GD32 MCU碰到IIC总线卡死怎么办?
大家在使用MCU IIC通信时,若碰到设备复位或者总线干扰等情况,可能会导致IIC总线卡死,表现上总线上SDA或者SCL其中一根线为低电平,IIC总线一直处于busy状态。此时若代码上一直等待总线空闲,则可能导致软件死机ÿ…...
算法——动态规划:0/1 背包问题
文章目录 一、问题描述二、解决方案1. DP 状态的设计2. 状态转移方程3. 算法复杂度4. 举例5. 实现6. 滚动数组6.1 两行实现6.2 单行实现6.3 优缺点 三、总结 一、问题描述 问题的抽象:给定 n n n 种物品和一个背包,第 i i i 个物品的体积为 c i c_i …...
又是奇瑞,“统一下班时间”过去不久,最近又整新活了...
奇瑞 345 345 可不是奇瑞的汽车型号,而是奇瑞 7 月份会议文章中提出的新策略。 简单来说,要提高加班效率,实现 3 个人干 5 个人活,拿 4 个人的工资,要把员工当成家人一样看待,要对他们的健康幸福负责。 前面…...
ubuntu24.04lts cmake编译 opencv4.5.4 contrib的一些问题
编译之前一定要安装好必须的库,否则即使提示编译成功,调用opencv后也可能会有问题 sudo apt-get update sudo apt-get upgradesudo apt-get install -y g sudo apt-get install -y cmake sudo apt-get install -y make sudo apt-get install…...
大数据面试SQL(三):每分钟在线直播人数
文章目录 每分钟在线直播人数 一、题目 二、分析 三、SQL实战 四、样例数据参考 每分钟在线直播人数 一、题目 有如下数据记录直播平台主播上播及下播时间,根据该数据计算出平台每分钟的在线直播人数。 这里用主播名称做统计,前提是主播名称唯一…...
python中执行mysql操作并将python脚本共享
mysql下载路径: MySQL :: MySQL Community Downloads [root2 ~]# vim py001.py a3 b4 print(ab) print(a**2b**2) [root2 ~]# python py001.py 7 25 [root2 ~]# python3 >>> import random >>> random <module rando…...
HTTP、HTTPS、SOCKS5三种协议特点
在互联网通信中,HTTP、HTTPS和SOCKS5是三种至关重要的协议,它们各自具有独特的特点和应用场景。本文将详细探讨这三种协议的特点,帮助读者更好地理解它们在网络通信中的作用。 一、HTTP协议特点 HTTP(Hypertext Transfer Protoc…...
在ubuntu、centos、openEuler安装Docker
目录 ubuntu、centos、openEuler安装Docker 1.在 Ubuntu 上安装 Docker 1. 1 更新软件包 1. 2 安装必要的依赖 1.3 添加 Docker 的 GPG 密钥 1.4 添加 Docker 仓库 1.5 更新软件包 1.6 安装 Docker 1.7 启动并启用 Docker 服务 1.8 验证安装 1.9 运行测试容器 1.10…...
公共命名空间的例子3
有这样一个句子 用x语言解释[12*3]。 在x语言中,不符合“先乘除后加减”,这个句子应该怎样解释呢? 第一步,进行词法分析,目的是识别出注释和字符串,其中可能包括任意符号,干扰编译过程。 第二步…...
【云存储】SDS软件定义存储,数据存储的类型与技术方案(块/文件/对象,Ceph、RBD等)
【云存储】SDS软件定义存储,数据存储的类型与技术方案(块/文件/对象,Ceph、RBD等) 文章目录 1、分布式存储架构(软件定义存储SDS,超融合基础架构HCI)2、存储类型(块存储,…...
第31课 Scratch入门篇:小画家(舞台上画画)
小画家(舞台上画画) 故事背景: 在舞台上选择画笔和颜色,进行画画 程序原理: 这节课我们继续练习画笔功能,通过画笔功能我们设计一个小画板,碰到哪种颜色画笔就切换成哪种颜色。 开始编程 1、绘制一大一小的黑色圆形,小的命名为画笔,大的圆形命名为black(黑色) 2、鼠…...
QT UI界面之ListView
文章目录 概述源码怎么用代码qt design 小结 概述 本来把布局文件那块写了一遍,但是看看都跟之前那篇差不多,就换了一个稍微有点难度的,也很常用的listview来写了。来看看,有什么好玩的。 源码 先看下源码,如下&…...
freeRTOS互斥量(mutex)
目录 前言 一、互斥量概述 二、互斥量函数 1.创建 2.其他函数 三、优先级反转示例 1.概念 2.代码示例 四、优先级继承 1.概念 2.代码示例 五、递归锁 1.死锁的概念 2.自我死锁 3.函数 4.递归锁代码示例 前言 在之前的信号量中,我们想要实现互斥的…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
