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

基于GeoTools使用JavaFx进行矢量数据可视化实战
目录 前言 一、JavaFx展示原理说明 二、GeoTools的Maven依赖问题 三、引入Geotools相关的资源包 四、创建JavaFx的Canvas实例 五、JavaFx的Scene和Node的绑定 六、总结 前言 众所周知,JavaFx是Java继Swing之后的又一款用于桌面应用的开发利器。当然࿰…...

zabbix的setup无法进入第二步
注意-部署时,报错要看的日志不止一个,php日志的报错也要看的,nginx接收到请求后是转发到php-fpm的 [rootweb01-84-41 ~]# chmod -R 777 /var/lib/php/session chmod: 无法访问"/var/lib/php/session": 没有那个文件或目录 [rootweb…...

代码随想录算法训练营第四十六天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结篇
一、115. 不同的子序列 题目链接:115. 不同的子序列 - 力扣(LeetCode) 文章讲解:代码随想录 (programmercarl.com)——115. 不同的子序列 视频讲解:动态规划之子序列,为了编辑距离做铺垫 | LeetCode&#x…...

宝塔安装nginx失败报错“检测到系统组件wget不存在,无法继续安装”
宝塔安装nginx失败报错“检测到系统组件wget不存在,无法继续安装” 问题描述解决方案 问题描述 在宝塔中安装lnmp环境时,安装nginx失败报错:检测到系统组件wget不存在,无法继续安装 如下图所示 通过检查发现系统是已经安装了wge…...

C++之运算符重载系列深入学习:从入门到精通!
为什么需要对运算符进行重载 C预定义中的运算符的操作对象只局限于基本的内置数据类型,但是对于我们自定义的类型是没有办法操作的。但是大多时候我们需要对我们定义的类型进行类似的运算,这个时候就需要我们对这么运算符进行重新定义,赋予其…...

国赛分析。。。。
山东 6散落2两元素 浙江 8散落两元素 安徽不公布 4散落2元素 120s 华南 8散落两元素 西部 8散落两元素 华北 8 2.。。。 华东 东北 路边6张两元素...

无缝融入,即刻智能[一]:Dify-LLM大模型平台,零编码集成嵌入第三方系统,42K+星标见证专属智能方案
无缝融入,即刻智能[一]:Dify-LLM大模型平台,零编码集成嵌入第三方系统,42K+星标见证专属智能方案 1.Dify 简介 1.1 功能情况 Dify,一款引领未来的开源大语言模型(LLM)应用开发平台,革新性地融合了后端即服务(Backend as a Service,BaaS)与LLMOps的精髓,为开发者铺…...

PLSQL导入导出ORACLE数据提示失败问题修改PLSQL配置
oracle中plsql导入提示无法导入问题 1.首先看下是否环境变量已经配置(具体配置看下面环境变量配置) 2.plsql数据导入中tools-->Preferences中配置如下框中的内容 3.设置 tnsnames.ora文件中看下是否设置有问题 4.PLSQL乱码问题 NLS_LANG SIMPLIFIED CHINESE_CHINA.ZHS16…...

从Shift+F6到雪花算法:IDEA开发中的那些坑与解法
在日常开发中,提升代码质量和开发效率是每个开发者追求的目标。作为 Java 开发者常用的集成开发环境,IntelliJ IDEA 提供了丰富的功能与快捷键,帮助我们更快速、更高效地完成日常工作。然而,即便是如此强大的工具,也会…...

Linux知识点总结
学习目标 常见的快捷键 Linux 是一个开源的类 Unix 操作系统,广泛应用于服务器、桌面和嵌入式系统。以下是一些重要的 Linux 知识点总结: 基础概念 文件系统:Linux 使用层次化的文件系统结构,根目录为 /,其他目录如 …...