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.递归锁代码示例 前言 在之前的信号量中,我们想要实现互斥的…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

算法—栈系列
一:删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...