Express 框架介绍

news2025/4/8 2:35:46

目录

1、简介

1.1 Web 应用

1.2 API

1.3 性能

1.4 框架

2、如何开始 Express 编程之旅

3、测试实例

4、其他问题

4.1 如何定义模型?

4.2 Express 支持哪些模板引擎?

4.3 如何处理 404 响应?

4.4 如何设置错误处理程序?

 4.5 如何渲染纯 HTML?


1、简介

Express  是快速、独立、极简的Node.js Web框架。主要体现在以下几个方面:

1.1 Web 应用

Express 是一个极简且灵活的 Node.js Web 应用框架,它为 Web 和移动应用提供了一组强大的功能。

1.2 API

有了无数的 HTTP 实用方法和中间件供您使用,创建强大的 API 变得快速而简单。

1.3 性能

Express 提供了一层薄薄的基本 Web 应用功能,而不会掩盖您熟悉和喜爱的 Node.js 功能。

1.4 框架

许多流行的框架都是基于 Express。

以下流行的Node.js框架都是基于Express构建的:

  • Feathers:在几分钟内构建原型,在几天内构建生产就绪的实时应用程序。
  • ItemsAPI:基于Express和Elasticsearch构建的Web和移动的应用程序的搜索后端。
  • KeystoneJS:网站和API应用程序框架/ CMS,具有自动生成的React.js管理员UI。
  • Poet:轻量级Markdown博客引擎,具有即时分页,标签和类别视图。
  • Kraken:安全且可扩展的层,通过提供结构和约定来扩展Express。
  • LoopBack:高度可扩展的开源Node.js框架,用于快速创建动态端到端REST API。
  • Sails:用于Node.js的MVC框架,用于构建实用的生产就绪应用程序。
  • Hydra-Express:Hydra-Express是一个轻量级的库,它有助于使用ExpressJS构建Node.js微服务。
  • Blueprint:用于构建API和后端服务的SOLID框架
  • Locomotive:Passport.js开发者为Node.js开发的强大MVC Web框架
  • graphql-yoga:功能齐全,但简单且轻量级的GraphQL服务器
  • Express Gateway:以Express为基础的功能齐全、可扩展的API网关
  • Dinoloop:基于typescript和依赖注入的Rest API应用框架
  • Kites:基于模板的Web应用框架
  • FoalTS:基于TypeScript的优雅且包罗万象的Node.Js Web框架。
  • NestJs:一个渐进式的Node.js框架,用于在TypeScript JavaScript(ES6,ES7,ES8)之上构建高效,可扩展和企业级的服务器端应用程序
  • Expressive Tea:一个小型框架,用于构建可模块化,干净,快速和描述性的服务器端应用程序,开箱即用。

2、如何开始 Express 编程之旅

3前提条件是本地环境必须安装了Node.js,如果没有安装可以参考这篇文章:Node.js 的安装

在本地创建一个目录,当作工作目录。

$ mkdir myapp
$ cd myapp

 通过npm init 进行初始化,会在目录下生成package.json文件。

npm init

 按照提示,输入对应信息,按回车键会进入下一项的输入,如果是默认可以直接按回车健。如下图所示:

对应字段信息包括以下:

package name:  包名称

version: 包版本

description: 包描述信息,让别人知道你这个包是做什么的。

entry point: 入口文件

test command: 测试命令

git repository: git 仓库地址

keywords: 关键词

author: 包的作者

license: (ISC) 许可默认为ISC,ISC许可是一种开放源代码许可证,在功能上与两句版的BSD许可证相同。

现在开始,我们把express安装在项目依赖中:

$ npm install express

 安装完成,查看以下对应的目录:

package.json 文件已创建,express依赖已安装,对应版本是4.18.2,在package.json里面指定了入口文件为index.js,那么在当前创建一个index.js的文件。

3、测试实例

在index.js写一个实例代码,如下所示:

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

我们先引入express的包,设置端口为3000,app.get 路由接受2个参数,第一个是地址,“/”是根目录,req是请求对象,res是响应对象,res.send向页面输入内容,最后app.listen 为监听端口,函数里为监听后打印的参数。

运行以下这个代码,如下所示:

node .\index.js

在浏览器中,我们可以输入 http://localhost:3000/ 看一下页面输入结果:

 

 发现找到了对应的路由,并且打印里面的内容,如果我们输入未定义的路由地址,看一下结果,例如输入:http://localhost:3000/test

 我们发现并没有找到对应路由,页面显示 404 Not Found。

4、其他问题

4.1 如何定义模型?

Express 没有数据库的概念。 这个概念留给第三方 Node 模块,允许你与几乎任何数据库进行交互。

有关以模型为中心的基于 Express 的框架,请参见 LoopBack。

4.2 Express 支持哪些模板引擎?

Express 支持任何符合 (path, locals, callback) 签名的模板引擎。 要规范模板引擎接口和缓存,请参阅 consolidate.js 项目以获得支持。 未列出的模板引擎可能仍支持 Express 签名。

4.3 如何处理 404 响应?

在 Express 中,404 响应不是错误的结果,因此错误处理程序中间件不会捕获它们。 此行为是因为 404 响应仅表示没有其他工作要做; 也就是说,Express 把所有的中间件函数和路由都执行了一遍,发现都没有响应。 你需要做的就是在堆栈的最底部(在所有其他函数下方)添加一个中间件函数来处理 404 响应:

app.use((req, res, next) => {
    res.status(404).send("不好意思,没有找到对应路径,请重新输入!")
})

 在运行时在 express.Router() 的实例上动态添加路由,这样路由就不会被中间件函数取代。

4.4 如何设置错误处理程序?

你可以用与其他中间件相同的方式定义错误处理中间件,除了使用四个参数而不是三个; 特别是签名 (err, req, res, next)

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
//   res.send('Hello World!')
throw Error('this is error !')
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

app.use((req, res, next) => {
    res.status(404).send("不好意思,没有找到对应路径,请重新输入!")
})

app.use((err, req, res, next) => {
    console.error(err.stack)
    res.status(500).send('报错了......')
  })

我们在路由中输出一个错误,然后中间件进行拦截,然后给出对应的提示,测试以下,浏览器中输入:http://localhost:3000/ 如下所示:

 4.5 如何渲染纯 HTML?

你不需要! 不需要使用 res.render() 函数 “render” HTML。 如果你有特定文件,请使用 res.sendFile() 函数。 如果你从一个目录提供许多资源,请使用 express.static() 中间件函数。

const express = require('express')
const path = require("path")
const app = express()
const port = 3000

app.use(express.static(path.join(__dirname, 'static')))
app.get('/', (req, res) => {
    // res.sendFile("D:\\2023\\code_test\\myapp\\static\\index.html")
    res.sendFile("index.html")
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

app.use((req, res, next) => {
    res.status(404).send("不好意思,没有找到对应路径,请重新输入!")
})

app.use((err, req, res, next) => {
    console.error(err.stack)
    res.status(500).send('报错了......')
  })

 res.sendFile() 可以返回指定的文件,默认传入的是一个绝对路径。

可以使用 express.static() 中间件函数,指定静态文件的目录。

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

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

相关文章

Python3模拟π的求值过程

假设我们已经知道了圆的面积计算公式是:πr,正方形的面积是r,但是不知道π的具体值。模拟结果如图所示:我们将1/4圆的面积s1比上正方形的面积s2就能得出1/4π,所以π就等于4倍的s1/s2。 图中横纵坐标轴最大值均为1&am…

无人驾驶中如何识别颜色并跟踪的具体应用

摄像头对于颜色的识别,我们在上一篇文章中有具体的介绍,并介绍了OpenCV中的一些常见知识点,这里我们来对颜色识别在无人驾驶中,做一个具体应用。 有兴趣的可以先看下本人拍摄的一个视频:无人车识别颜色并跟踪 通过…

PICO4开发实战一:节奏光剑(VR)(需求文档)

PICO4开发实战一:节奏光剑(VR)(需求文档) 文章目录 PICO4开发实战一:节奏光剑(VR)(需求文档)一、V1 基础功能开发1、V1版本完成页面2、V1基本功能需求介绍&am…

81. 正则表达式

一、概述二、匹配单个字符三、匹配一组字符四、使用元字符五、重复匹配六、位置匹配七、使用子表达式八、回溯引用九、前后查找十、嵌入条件参考资料 一、概述 正则表达式用于文本内容的查找和替换。 正则表达式内置于其它语言或者软件产品中,它本身不是一种语言或…

学习react,复制一个civitai(C站)-更新3

更新内容 优化了一下加载速度 图片列表 初步更新了199张图片,大部分都有stable diffusion 的prompts。 可以直接复制到AI绘画里面使用。 先来看看效果图吧: 我还是挺喜欢这种砌砖流布局 技术点 同样使用了砌墙瀑布流布局:masonry js 安装方法 npm …

配置Propos检验

配置Propos检验 ​ 和vue不同react并未为我们直接配置props校验,(类型必填默认值),需要我们就手动进行配置

SqlServer数据库【基础-更删改查】

一、创建语句 (1)创建数据库 1.检查系统中是否存在这个数据库,存在则删除 格式: if exists(select * from sysdatabases where name数据库名) drop database 数据库名 go例子: if exists(select * from sysdataba…

Redis事务(4)

⭐ 作者简介:码上言 ⭐ 代表教程:Spring Boot vue-element 开发个人博客项目实战教程 ⭐专栏内容:个人博客系统 ⭐我的文档网站:http://xyhwh-nav.cn/ 文章目录 Redis事务1、Redis事务概念2、应用1、MULTI开启事务2、事务失败…

【数据库】数据库索引结构分析,MySQL单表最多能存放多少数据

经常听到MySQL单表最多能存放2千万数据,多了就要考虑分表,依据是什么呢? 本文以MySQL为例,默认数据页大小是16KB。 索引内容结构 非叶子节点 主键页号 假如: 主键是bigint,8bit;页号是4bit&…

Vue中v-html用法以及指令汇总

操作数组的方法 : push:数组最后位置新增元素 pop: 删除最后一个元素 shift: 删除第一个元素 unshift:往前面加一个元素 splice:在数组的指定位置插入、删除、替换一个元素 sort: 数组排序…

力扣算法数学类—Excel表列名称

目录 Excel表列名称 题解: 代码: Excel表列名称 168. Excel表列名称 - 力扣(LeetCode) 给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。 例如: A -> 1 B -> 2 C -> 3 ... Z -…

CENTOS安装 graylog5.0

我们直接开始 基础环境和java sudo yum install epel-release 并安装带有 sudo yum install pwgenyum install java-1.8.0-openjdk-headless.x86_64 MONGODB 安装数据库 6.0 [mongodb-org-6.0] nameMongoDB Repository baseurlhttps://repo.mongodb.org/yum/redhat/$relea…

ensp静态路由

要求: 1.全网可达 2.拓朴中所需地址全部基于192.168.0.0/24 3.静态路由(不许使用其他动态) 4.R2环回需要汇总 拓朴图: 将192.168.0.0/24划分为5个子网, 得: 192.168.0.0/27 192.168.0.32/27 192.168.0.64/…

在Windows Server2016上搭建Active Directory域控服务

搭建服务端 使用Windows2016数据中心版完成 1. 配置服务器角色 2. 选择服务器角色 3. 选择当前服务器4. 选择Active Directory和DNS角色5. 确认安装 6. 提升为Domain Controller域控服务器 7. 设置根域 8. 配置保护密码 9. DNS 10. NetBIOS配置 11. 指定数据文件位置 12. 确…

Flink AggregateFunction窗口函数,merge何时执行

1.前言 在我们使用Flink DataStream API编写业务代码时,aggregate()算子和AggregateFunction无疑是非常常用的。编写一个AggregateFunction需要实现4个方法: /** Licensed to the Apache Software Foundation (ASF) under one* or more contributor li…

瀚高企业版数据库V6单机安装指导手册(Linux)

目录 瀚高企业版数据库V6单机安装指导手册(Linux) 1. 环境准备 1.1 防火墙设置 1.1.1 开放数据库使用端口 1.1.2 关闭防火墙 1.2 检查时区和时间 1.3 创建highgo用户 1.4 检验安装包 2. 软件安装 2.1 图形化安装 3. 设置highgo用户环境变量 4.…

RocketMQ无损扩容实战

这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党 背景 假设目前我们的线上部署的RocketMQ部署的是一主一从,现在随着业务的发展,或者是我们需要做一些促销活动,会有突发流量高…

【unity细节】为什么发射炮弹实例化出来了却无法移动

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 收录于专栏:unity细节和bug ⭐为什么发射炮弹实例化出来了却无法移动⭐ 文章目录 ⭐为什么发射炮弹实例化出来…

JS高级进阶

JavaScript 进阶 - 第1节 学习作用域、变量提升、闭包等语言特征,加深对 JavaScript 的理解,掌握变量赋值、函数声明的简洁语法,降低代码的冗余度。 理解作用域对程序执行的影响能够分析程序执行的作用域范围理解闭包本质,利用闭包…

java mybatis

1.框架介绍 为什么使用框架? (1)框架效率高,成本低 (2)框架是别人写好的构建,我们只需学会如何使用它【可维护性高】 (3)框架是基于MVC的思想【web层独有的思想】的拓展而开发的…