第八章认识Express框架

目录

Express模块化路由

基本概述

基本使用

基本构建

案例项目

Express接收请求参数

基本概述

基本类别

Express接收GET请求参数

Express接收POST请求参数

Express接收路由参数


Express模块化路由

基本概述

在Express中,路由是指确定应用程序如何响应对特定端点的客户端请求,包括获取、添加、更新和删除资源等。

当应用程序收到请求时,它通常需要确定如何响应该请求,这由路由来完成。在Express应用程序中,可以使用模块化路由来更好地组织路由代码并提高其可读性和可维护性。

模块化路由是指将路由器代码分解为多个小文件,并将每个文件映射到路由路径。

这样做的好处是可以在应用程序中轻松添加或删除路由路径,同时使代码更易于阅读和维护。使用Express的Router函数,可以轻松地将路由器添加到应用程序中,使其成为模块化的路由器。

每个Express路由器是一个中间件,它可以在其中定义一个或多个路由。

路由有一个HTTP方法,如get、post、put、delete等,以及一个指定路由路径的路径。

当路由被触发时,将执行一个或多个处理程序函数,这些函数将确定如何响应请求。可以使用app.use()方法将路由器添加到应用程序中。这样当收到请求时,Express将自动将请求路由到正确的路由器中。

基本使用

实现模块化路由需要用到express.Router()方法来创建一个新的路由器对象(route),然后使用route.get()和route.post()来注册当前模块路由对象下的二级路由,形成一个简单的模块化路由。

  • express.Router()方法定义route对象的示例代码如下:
const route = express.Router();
//express.Router()表示创建模块化路由对象

提示:这行代码使用 express.Router() 方法创建了一个新的路由对象 route ,该对象可以用来注册该模块下的路由处理函数,即该模块下的所有路由都会在 route 对象上定义,以实现模块化的路由设计。

使用 express.Router() 方法创建一个新的路由对象,可以避免使用全局的 app 对象来定义路由,提高代码的可读性,也更容易维护。

这段代码中的 const 是用来声明常量的关键字,而 route 则是该常量的名称。

  • route对象可以定义二级路由,示例代码如下:
route.get('请求路径','请求处理函数');
route.post('请求路径','请求处理函数');

这两行代码使用 route.get() 和 route.post() 方法来注册当前模块路由对象下的二级路由,具体来说:

  • route.get('请求路径', '请求处理函数') 方法用于在 route 路由对象上定义 GET 请求的路由,其中 '请求路径' 指定路由路径, '请求处理函数' 指定该路由的处理函数。
  • route.post('请求路径', '请求处理函数') 方法用于在 route 路由对象上定义 POST 请求的路由,其中 '请求路径' 指定路由路径, '请求处理函数' 指定该路由的处理函数。

通过这两个方法,可以在当前模块下定义所需的所有路由,即可实现模块化的路由设计。

  • route对象创建成功后,使用app.use()注册route模块化路由,示例如下:
app.use('请求路径',route);

这行代码使用了 app.use() 方法,将定义好的 route 路由对象注册到了 Express 应用中,并制定了该路由对象的请求路径。

具体来说,app.use('请求路径', route) 的含义为:

  • 请求路径:指定了路由所监听的路径,即当客户端发起该路径的请求时,会触发该路由对象中的相应路由处理函数。
  • route:指定了该路由对象,即之前定义的 express.Router() 创建的路由对象。

这行代码的作用是将路由对象注册到应用中,使得应用可以通过该路由对象来处理对应的二级路由请求。

综上所诉,模块化路由的基本使用的步骤如下:

  1. 创建一个模块化的路由对象:
    const express = require('express');
    const router = express.Router();
    
  2. 为路由对象添加一个或多个路由:
    router.get('/', function(req, res) {
      res.send('Hello World!');
    });
    router.get('/user/:id', function(req, res) {
      res.send('user ' + req.params.id);
    });
    
  3. 把路由对象挂载到应用程序中的指定路径:
    app.use('/api', router);
    
    这个例子中,我们把路由对象挂载到 /api 的路径下,因此访问 /api/api/user/:id 时都会使用我们刚刚定义的路由规则。

完整的示例代码如下:

const express = require('express');
const app = express();

// 创建一个模块化的路由对象
const router = express.Router();

// 为路由对象添加一个或多个路由
router.get('/', function(req, res) {
  res.send('Hello World!');
});
router.get('/user/:id', function(req, res) {
  res.send('user ' + req.params.id);
});

// 把路由对象挂载到应用程序中的指定路径
app.use('/api', router);

// 启动应用程序
app.listen(3000, function() {
  console.log('App is listening on port 3000!');
});

这样,当我们访问 http://localhost:3000/api 时,会显示 Hello World!,访问 http://localhost:3000/api/user/123 时会显示 user 123

代码注释

  1. const express = require('express'); 导入 express 模块。

  2. const app = express(); 创建一个 Express 应用程序实例。

  3. const router = express.Router(); 创建一个模块化的路由对象。

  4. router.get('/', function(req, res) {...} 为路由对象添加一个 GET 请求处理函数,当用户访问路径为 / 时,返回 Hello World!

  5. router.get('/user/:id', function(req, res) {...} 为路由对象添加另一个 GET 请求处理函数,当用户访问路径为 /user/:id 时,返回 user :id:id 是一个动态参数,表示用户 ID。

  6. app.use('/api', router); 把路由对象挂载到应用程序中的 /api 路径下,即当用户访问应用程序的 /api 路径时,使用该路由对象进行处理。

  7. app.listen(3000, function() {...} 启动应用程序,监听端口 3000,并在控制台输出 "App is listening on port 3000!"

 

基本构建

这个是为了更加直观的了解构建模块化路由的过程

  1. 创建一个模块化的路由对象

在 Express 应用程序中,可以使用 express.Router() 方法创建一个模块化的路由对象。这个方法返回一个路由对象,该对象表示一个完整的路由模块,可以在此对象中添加特定的 HTTP 请求方式和 URL 路径,然后在应用程序中使用该路由模块。

const express = require('express');
const router = express.Router();
  1. 定义路由规则

在路由对象上定义路由规则,可以使用各种 HTTP 请求方式(例如 get()post()put()delete() 等)和 URL 路径。下面以 get() 方法为例说明:

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

该代码定义了一个 GET 请求方式的路由规则,当客户端向 URL 路径 / 发送请求时,会执行该处理程序,并返回字符串 'Hello World!'

  1. 把路由对象导出

在路由模块中调用 module.exports 方法,将路由对象作为模块输出,该对象可以在应用程序中使用。例如:

module.exports = router;
  1. 在应用程序中使用路由模块

导入路由模块,在应用程序中使用 app.use() 方法挂载该模块。例如:

const router = require('./router');
app.use('/api', router);

此代码将路由模块 router 挂载到应用程序的 /api 路径上,当客户端向 /api 路径发送请求时,会执行该模块中定义的路由规则。

完整的模块化路由示例代码:

新建文件router.js:

const express = require('express');
const router = express.Router();

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

router.get('/users', (req, res) => {
  res.send('Users page');
});

module.exports = router;

新建文件app.js:

const express = require('express');
const app = express();
const router = require('./router');

app.use('/api', router);

app.listen(3000, () => {
  console.log('Server started on port 3000');
});

注意:以上代码一般是在Express安装的目录下新建文件进行。

在此示例中,当客户端向 /api 路径发送 GET 请求时,会匹配到 router 中定义的第一个路由规则,并返回 'Hello World!'。当客户端向 /api/users 路径发送 GET 请求时,会匹配到 router 中定义的第二个路由规则,并返回 'Users page'

案例项目

一个简单的项目,实现一个用户注册和登录系统。首先,我们需要安装和引入Express模块:

  1. 安装Express模块
npm install express --save
  1. 引入Express模块
const express = require('express');
const app = express();

接下来,我们可以定义一些路由和处理函数来实现注册和登录功能。

  1. 注册页面路由和处理函数
// 注册页面路由
app.get('/register', (req, res) => {
  res.send('注册页面');
});

// 注册处理函数
app.post('/register', (req, res) => {
  // 处理注册请求
});

在上面的代码中,我们定义了一个GET请求的/register路由和一个POST请求的/register路由。GET请求的/register路由用于显示注册页面,POST请求的/register路由用于处理注册请求。

  1. 登录页面路由和处理函数
// 登录页面路由
app.get('/login', (req, res) => {
  res.send('登录页面');
});

// 登录处理函数
app.post('/login', (req, res) => {
  // 处理登录请求
});

同样的,我们定义了一个GET请求的/login路由和一个POST请求的/login路由。GET请求的/login路由用于显示登录页面,POST请求的/login路由用于处理登录请求。

最后,我们需要监听端口并启动服务器。

  1. 启动服务器
app.listen(3000, () => {
  console.log('服务器已启动');
});

完整代码如下:

const express = require('express');
const app = express();

// 注册页面路由
app.get('/register', (req, res) => {
  res.send('注册页面');
});

// 注册处理函数
app.post('/register', (req, res) => {
  // 处理注册请求
});

// 登录页面路由
app.get('/login', (req, res) => {
  res.send('登录页面');
});

// 登录处理函数
app.post('/login', (req, res) => {
  // 处理登录请求
});

// 启动服务器
app.listen(3000, () => {
  console.log('服务器已启动');
});

这是一个简单的用户注册和登录系统,只实现了页面和路由,并没有实现具体的处理逻辑。在实际项目中,我们需要根据业务需求实现具体的功能。

可以通过浏览器或者curl命令访问:

  1. 使用浏览器访问

在浏览器地址栏输入http://localhost:3000/register或者http://localhost:3000/login来访问注册页面和登录页面。

  1. 使用curl命令访问

打开终端或命令行,输入以下命令:

curl http://localhost:3000/register

或者:

curl http://localhost:3000/login

执行后会输出页面内容。

 

Express接收请求参数

基本概述

Express是一款非常流行的Node.js Web框架,使用它能使我们轻松构建Web应用程序。在Web应用程序中,我们需要接收来自客户端发送的请求数据,这个过程中请求参数起着至关重要的作用。因此,使用Express接收请求参数是非常必要的,原因如下:

  1. 灵活性:当我们接收到请求参数后,可以根据参数的不同来执行不同的逻辑代码或者返回不同的输出结果,从而使我们的程序更加灵活。

  2. 安全性:对于不合法的请求参数,我们可以进行校验和过滤,避免一些安全问题的发生,提高我们程序的安全性。

  3. 交互性:通过接收请求参数,我们可以使程序更与用户进行交互,例如:接收用户的表单提交数据,登录验证等等。

  4. 数据处理:接收到请求参数后,我们可以对请求的数据进行处理,例如:入库,修改等等。

总之,Express是一款非常灵活、快速、扩展性强的Web框架,使用它接收请求参数,可以使我们的Web应用程序更加高效、可靠和安全。

基本类别

Express接收GET请求参数

Express框架中的req.query用于获取GET请求参数,框架内部会将GET参数转换为对象并返回。示例如下:

app.get('/',(req,res) => {
  res.send(req.query);
});

这段代码中有一行,写成了两行,让我们逐行来看:

app.get('/', (req, res) => {

这一行表示使用 Express 应用程序对象 appget 方法,表示当应用程序接收到来自根路径 / 的 GET 请求时,会执行后续的回调函数。回调函数接收两个参数 reqres,分别代表请求对象和响应对象。

  res.send(req.query);

这一行使用 res.send 方法将 req.query 返回给客户端作为响应的内容。req.query 是一个对象,包含了发送到服务器的查询参数。当客户端发送 GET 请求时,Express 框架会将查询参数解析为一个对象,并将其作为 req.query 属性存储在请求对象中。因此,使用 res.send(req.query) 将查询参数作为响应返回给客户端。

 

案例:来演示如何使用Express接收GET请求参数。

首先需要安装Express框架:

npm install express --save

接下来,我们创建一个index.js文件,并引入Express框架:

const express = require('express');
const app = express();

然后,我们创建一个GET路由,用来接收参数:

app.get('/api/user', (req, res) => {
  const { name, age } = req.query;
  res.send(`Hello ${name}, you are ${age} years old!`);
});

以上代码中,我们在/api/user路径下创建了一个GET路由,当用户访问该路径时,框架会自动解析URL中的参数,并将其转换为一个对象,对象的属性名即为参数名,属性值即为参数值。

最后,我们添加一个监听端口的代码,启动应用:

const port = 3000;
app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

完整代码如下:

const express = require('express');
const app = express();

app.get('/api/user', (req, res) => {
  const { name, age } = req.query;
  res.send(`Hello ${name}, you are ${age} years old!`);
});

const port = 3000;
app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

现在,你可以通过访问http://localhost:3000/api/user?name=Tom&age=18来测试应用程序是否正常工作了。结果如下图

00557b1182f04fa89f5fe1cd3aec3a5e.png

Express接收POST请求参数

Express框架中的req.body用于获取POST请求参数,需要借助第三方body-parser模块将POST参数转换为对象形式。(语法跟上述代码相同,只需要在res.send()输入rep.body即可)

在 Express 中,要获取 POST 请求中的参数,需要使用 req.body 对象。但是,因为 Node.js 的核心模块 http 并没有提供直接获取 POST 参数的方法,所以我们需要使用第三方中间件来实现这个功能。其中,body-parser 库是最常用的一种。

在使用 body-parser 库之前,需要使用 npm 命令将该库安装到项目中。可以通过在命令行中执行以下命令来安装:

npm install body-parser

安装好之后,在 Express 应用程序中引入该库,并将其添加为中间件即可。以下是一个简单的例子,假设我们有一张表单,其中有一个 name 输入框和一个 password 输入框。当我们提交表单并发送 POST 请求时,我们需要从 req.body 对象中获取这些输入框的值:

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

// 添加 body-parser 中间件
app.use(bodyParser.urlencoded({ extended: true }));

app.post('/login', (req, res) => {
  const name = req.body.name;
  const password = req.body.password;
  // use name and password variables to authenticate user
});

在上面的例子中,app.use 函数用于加载 body-parser 中间件,并将其设置为处理 URL 编码的请求体。此时,req.body 对象已经包含了表单提交的参数。注意,body-parser 库会将 POST 请求的参数转换为对象形式,因此可以用 req.body.namereq.body.password 语法获取表单中的值。

案例:来演示如何使用Express接收POST请求参数。

首先需要安装Express框架和body-parser模块:

npm install express body-parser --save

接下来,我们创建一个index.js文件,并引入Express框架和body-parser模块:

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

然后,我们需要在应用程序中使用body-parser中间件来处理POST请求中的参数:

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

以上代码中,我们使用body-parser中间件来处理两种类型的POST请求参数:application/x-www-form-urlencodedapplication/json。其中,urlencoded表示把参数转换为URL字符串的形式,json表示把参数转换为JSON对象的形式。

接下来,我们创建一个POST路由来接收参数:

app.post('/api/user', (req, res) => {
  const { name, age } = req.body;
  res.send(`Hello ${name}, you are ${age} years old!`);
});

以上代码中,我们在/api/user路径下创建了一个POST路由,当用户发起POST请求时,框架会自动解析请求体中的参数,并将其转换为一个对象,对象的属性名即为参数名,属性值即为参数值。

最后,我们添加一个监听端口的代码,启动应用:

const port = 3000;
app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

完整代码如下:

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

app.post('/api/user', (req, res) => {
  const { name, age } = req.body;
  res.send(`Hello ${name}, you are ${age} years old!`);
});

const port = 3000;
app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

现在,你可以使用POSTMAN等工具来发送POST请求,格式为application/x-www-form-urlencodedapplication/json,参数为nameage,来测试应用程序是否正常工作了。

Express接收路由参数

在使用 Express 构建 Web 应用时,我们经常需要从客户端接收一些信息。其中一种方式是在 URL 中传递参数,这种参数通常称为路由参数或路径参数。在 Express 中,可以使用冒号 : 来定义路由参数。

Express接收路由参数的示例代码:

app.get('/find/:id', (reg,res) => {
res.send(req.params);
});

这段代码定义了一个 GET 请求的路由 /find/:id,其中 :id 是一个路由参数。当客户端请求 /find/123 时,Express 会将 123 解析为 req.params.id,并将一个对象 { id: '123' } 发送给客户端作为响应。

代码中的 req.params 是一个对象,它包含了所有的路由参数和它们的值。在本例中,它的值为 { id: '123' }。通过将整个对象发送回客户端,我们可以将所有的路由参数都包含在响应中,以便客户端可以根据需要进行处理。

案例:以下是一个简单的 Express 项目,它演示了如何接收和使用路由参数:

const express = require('express');
const app = express();

// 定义一个路由处理程序,它匹配 '/students/:id' 路由
app.get('/students/:id', (req, res) => {
  const { id } = req.params;
  // 假设这里根据 id 从数据库中获取学生信息
  const student = { id, name: 'John Doe', age: 20 };
  res.send(student);
});

app.listen(3000, () => {
  console.log('Server started on port 3000');
});

在上面的示例中,我们定义了一个路由处理程序,它匹配 /students/:id 路由,其中 :id 是路由参数。当客户端请求该路由时,我们从 req.params 中提取 id 参数,并使用它从数据库中获取学生信息。然后,我们将学生信息发送回客户端。

例如,如果客户端请求路径为 /students/123,则路由处理程序会响应:

{
  "id": "123",
  "name": "John Doe",
  "age": 20
}

当然,这只是一个简单的示例,实际上你可能需要更复杂的路由参数来访问数据库中的数据。

注意:可以使用类似`http://localhost:3000/students/123`的URL来访问此路由处理程序。其中,`123`是路由参数,可以是任何数字。此示例假设您已经启动了该应用程序并在端口3000上侦听连接。如果要在浏览器中进行测试,只需将上面的URL复制到浏览器地址栏中即可。

文章到此一游,修行结束打卡

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python语言高级实战-内置函数super()的使用之类的单继承(附源码和实现效果)

实现功能 super()是一个内置函数,用于调用父类的方法。super() 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用&#xf…

Android Studio(项目收获)

取消按钮默认背景色 像按钮默认背景色为深蓝色&#xff0c;即使使用了background属性指定颜色也不能生效。 参考如下的解决方法&#xff1a; 修改/res/values/themes.xml中的指定内容如下&#xff1a; <style name"Theme.TianziBarbecue" parent"Theme.Mater…

服务号怎么改成订阅号

服务号和订阅号有什么区别&#xff1f;服务号转为订阅号有哪些作用&#xff1f;在推送频率上来看&#xff0c;服务号每月能推送四条消息&#xff0c;而订阅号可以每天&#xff08;24小时&#xff09;推送一条消息。如果企业开通公众号的目的是提供服务&#xff0c;例如售前资讯…

二叉树—相关计算题

目录 一、概念题 二、计算题 1、节点数 2、深度 3、遍历序列 一、概念题 1、在用树表示的目录结构中&#xff0c;从根目录到任何数据文件&#xff0c;有&#xff08; &#xff09;通道 答案&#xff1a;唯一一条&#xff0c;树的特点是不相交&#xff0c;所以不可能有多…

uniapp打包嵌入app,输入框被键盘遮挡的问题

问题描述&#xff1a;将uniapp开发的应用打包成wgt包放入app后&#xff0c;发现安卓手机的输入框会被手机输入法的键盘遮挡&#xff0c;导致看不到自己输入了什么内容&#xff1b;而在ios端是正常的&#xff0c;输入框会被键盘顶起&#xff0c;能清楚看到自己输入的内容。 在解…

数据库实验:SQL的数据视图

目录 视图概述视图的概念视图的作用 实验目的实验内容实验要求实验过程 视图概述 视图是由数据库中的一个表或多个表导出的虚拟表&#xff0c;其作用是方便用户对数据的操作 视图的概念 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一…

升级 MacOS 系统后,playCover 内游戏打不开了如何解决

我们有些小伙伴在升级了 macOS 系统后大概率会遇到之前能够正常使用的 playCover 突然游戏打不开了&#xff0c;最近 mac 刚刚正式推出了 MacOS 14.1 ,导致很多用户打开游戏会闪退&#xff0c;我们其实只需要更新一下 playCover 就可以解决 playCover 正式版更新会比较慢所以我…

北京陪诊小程序|陪诊系统开发|陪诊小程序未来发展不可小觑

近几年随着互联网快速发展&#xff0c;各行业领域都比较注重线上服务系统&#xff0c;通过陪诊小程序开发可以满足更多用户使用需求&#xff0c;同时还能提高用户使用体验。现在陪诊类的软件应用得到全面推广&#xff0c;在医疗行业当中陪诊小程序更贴近用户生活&#xff0c;可…

CN考研真题知识点二轮归纳(4)

持续更新&#xff0c;上期目录&#xff1a; CN考研真题知识点二轮归纳&#xff08;4&#xff09;https://blog.csdn.net/jsl123x/article/details/134135134?spm1001.2014.3001.5501 1.既可以扩展网段又是二层的设备 网段一般指一个计算机网络中使用同一物理层设备&#xff…

el-select多选以tag展示时,超过显示长度以...省略号显示,且在一行展示

效果&#xff1a; 代码&#xff1a; <span>系统词典维度&#xff1a;</span><el-selectv-model"dNum"placeholder"请选择"multiplecollapse-tags //设置collapse-tags属性将它们合并为一段文字size"small"style"width:160p…

LabVIEW示波器连续触发编程

LabVIEW示波器连续触发编程 niScopeEX Fetch Forever范例利用了如何设置硬件和驱动的优点来进行连续采集。 当NI-SCOPE设备被设置为采集预触发扫描&#xff0c;设备上的板载内存被用作一个环形缓冲。这样&#xff0c;无论触发何时到来&#xff0c;设备都可以追踪和检索所有要求…

vs code 和 hbuilder 历史记录查询

一.Hbuilder 找到需要的文件右键 二. vs code

Linux操作系统中软件安装:用RPM包管理器安装软件步骤

安装软件的一般步骤如下&#xff1a; 1.打开终端&#xff0c;作为root用户或使用sudo命令获取管理员权限。 2.使用RPM命令进行软件包的安装。例如&#xff0c;使用“rpm -ivh 软件包名称.rpm”命令来安装软件包&#xff0c;其中“-i”表示安装&#xff0c;“-v”表示显示详细安…

centos7.9 postgresql 16.0 源码安装部署

postgresql 16.0 源码安装部署 环境准备 系统主机名IP地址centos7.9postgres192.168.200.56 软件准备 postgresql-16.0.tar.gz https://ftp.postgresql.org/pub/source/v16.0/postgresql-16.0.tar.gz依赖安装 yum -y install systemd-devel readline readline-devel zlib-devel…

数据可视化:动态柱状图

终于来到最后一个数据可视化的文章拿啦~~~ 在这里学习如何绘制动态柱状图 我先整个活 (๑′ᴗ‵๑)&#xff29; Lᵒᵛᵉᵧₒᵤ❤ 什么是pyecharts&#xff1f; 答&#xff1a; Python的Pyecharts软件包。它是一个用于Python数据可视化和图表绘制的库&#xff0c;可用于制作…

openGauss学习笔记-116 openGauss 数据库管理-设置数据库审计-审计概述

文章目录 openGauss学习笔记-116 openGauss 数据库管理-设置数据库审计-审计概述116.1 背景信息116.2 操作步骤 openGauss学习笔记-116 openGauss 数据库管理-设置数据库审计-审计概述 116.1 背景信息 数据库安全对数据库系统来说至关重要。openGauss将用户对数据库的所有操作…

一个高性能类型安全的.NET枚举实用开源库

从零构建.Net前后端分离项目 枚举应该是我们编程中&#xff0c;必不可少的了&#xff0c;今天推荐一个.NET枚举实用开源库&#xff0c;它提供许多方便的扩展方法&#xff0c;方便开发者使用开发。 01 项目简介 Enums.NET是一个.NET枚举实用程序库&#xff0c;专注于为枚举提…

Python如何解析json对象?

目录 一、JSON简介 二、Python的json模块 1. 加载JSON数据 2. 生成JSON数据 三、处理复杂的JSON数据 四、自定义JSON解析器 五、注意事项和最佳实践 六、总结 JSON&#xff08;JavaScript Object Notation&#xff09;作为一种轻量级的数据交换格式&#xff0c;在网络通…

【入门Flink】- 06Flink作业提交流程【待完善】

Standalone 会话模式作业提交流程 代码生成任务的过程&#xff1a; 逻辑流图&#xff08;StreamGraph&#xff09;→ 作业图&#xff08;JobGraph&#xff09;→ 执行图&#xff08;ExecutionGraph&#xff09;→物理图&#xff08;Physical Graph&#xff09;。 作业图算子链…

solidworks安装时,出现这个错误:无法获得下列许可SOLIDWORKS Standard.无效的(不一致的)使用许可号码。(-8,544,0)

问题描述&#xff1a;在安装SolidWorks2023时&#xff0c;按照软件管家中的步骤&#xff0c;但是在打开SolidWorks2023桌面上的快捷键时&#xff0c;出现了这个错误&#xff1a; 无法获得下列许可SOLIDWORKS Standard.无效的&#xff08;不一致的&#xff09;使用许可号码。(-…