• day5:Node.js 第三方库


    day5:Node.js 第三方库

    使用 Express.js 构建 Web 应用

    Express框架是Node.js生态系统中的一种流行的Web应用程序框架。其核心功能主要包括以下几个方面:

    1. 路由:Express提供了一种方便的方式来定义路由,使得开发人员可以基于不同的HTTP方法(如GET、POST等)和URL来定义处理请求的函数。
    2. 中间件:这是Express框架的另一个核心特性,用于在请求到达路由处理函数之前或之后执行一些操作。这些操作可以包括日志记录、身份验证、压缩响应等。
    3. 模板渲染:Express框架支持将动态数据与模板结合,生成并返回最终的HTML页面。这一特性使得开发人员可以更方便地构建和管理Web应用程序。
    安装 Express

    安装 Express 并将其保存到依赖列表中:

    [root@node3 nodejs]# cnpm install express --save
    
    • 1

    以上命令会将 Express 框架安装在当前目录的 node_modules 目录中, node_modules 目录下会自动创建 express 目录。以下几个重要的模块是需要与 express 框架一起安装的:

    • body-parser - node.js 中间件,用于处理 JSON, Raw, Text 和 URL 编码的数据。
    • cookie-parser - 这就是一个解析Cookie的工具。通过req.cookies可以取到传过来的cookie,并把它们转成对象。
    • multer - node.js 中间件,用于处理 enctype=“multipart/form-data”(设置表单的MIME编码)的表单数据。
    [root@node3 nodejs]# cnpm install body-parser --save
    [root@node3 nodejs]# cnpm install cookie-parser --save
    [root@node3 nodejs]# cnpm install multer --save
    
    • 1
    • 2
    • 3

    安装完后,我们可以查看下 express 使用的版本号:

    [root@node3 nodejs]# cnpm list express
    helloworld@1.0.0 /root/nodejs
    └── express@4.18.2 -> ./node_modules/.store/express@4.18.2/node_modules/express
    
    
    • 1
    • 2
    • 3
    • 4
    [root@node3 nodejs]# cnpm list
    helloworld@1.0.0 /root/nodejs
    ├── accepts@1.3.8 extraneous
    ├── array-flatten@1.1.1 extraneous
    ├── body-parser@1.20.2 -> ./node_modules/.store/body-parser@1.20.2/node_modules/body-parser
    ├── bytes@3.1.2 extraneous
    ├── call-bind@1.0.2 extraneous
    ├── content-disposition@0.5.4 extraneous
    ├── content-type@1.0.5 extraneous
    ├── cookie-parser@1.4.6 -> ./node_modules/.store/cookie-parser@1.4.6/node_modules/cookie-parser
    ├── cookie-signature@1.0.6 extraneous
    ├── cookie@0.5.0 extraneous
    ├── debug@2.6.9 extraneous
    ├── depd@2.0.0 extraneous
    ├── destroy@1.2.0 extraneous
    ├── ee-first@1.1.1 extraneous
    ├── encodeurl@1.0.2 extraneous
    ├── escape-html@1.0.3 extraneous
    ├── etag@1.8.1 extraneous
    ├── express@4.18.2 -> ./node_modules/.store/express@4.18.2/node_modules/express
    ├── finalhandler@1.2.0 extraneous
    ├── forwarded@0.2.0 extraneous
    ├── fresh@0.5.2 extraneous
    ├── function-bind@1.1.1 extraneous
    ├── get-intrinsic@1.2.1 extraneous
    ├── has-proto@1.0.1 extraneous
    ├── has-symbols@1.0.3 extraneous
    ├── has@1.0.4 extraneous
    ├── http-errors@2.0.0 extraneous
    ├── iconv-lite@0.4.24 extraneous
    ├── ipaddr.js@1.9.1 extraneous
    ├── media-typer@0.3.0 extraneous
    ├── merge-descriptors@1.0.1 extraneous
    ├── methods@1.1.2 extraneous
    ├── mime-db@1.52.0 extraneous
    ├── mime-types@2.1.35 extraneous
    ├── mime@1.6.0 extraneous
    ├── ms@2.0.0 extraneous
    ├── multer@1.4.5-lts.1 -> ./node_modules/.store/multer@1.4.5-lts.1/node_modules/multer
    ├── mysql@2.18.1
    ├── negotiator@0.6.3 extraneous
    ├── object-inspect@1.12.3 extraneous
    ├── on-finished@2.4.1 extraneous
    ├── parseurl@1.3.3 extraneous
    ├── path-to-regexp@0.1.7 extraneous
    ├── proxy-addr@2.0.7 extraneous
    ├── qs@6.11.0 extraneous
    ├── range-parser@1.2.1 extraneous
    ├── raw-body@2.5.1 extraneous
    ├── safe-buffer@5.2.1 extraneous
    ├── safer-buffer@2.1.2 extraneous
    ├── send@0.18.0 extraneous
    ├── serve-static@1.15.0 extraneous
    ├── setprototypeof@1.2.0 extraneous
    ├── side-channel@1.0.4 extraneous
    ├── statuses@2.0.1 extraneous
    ├── toidentifier@1.0.1 extraneous
    ├── type-is@1.6.18 extraneous
    ├── unpipe@1.0.0 extraneous
    ├── utils-merge@1.0.1 extraneous
    └── vary@1.1.2 extraneous
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    第一个 Express 框架实例

    创建 express_demo.js 文件,代码如下所示:

    const express = require('express');  
    const app = express();  
    app.use(express.json()); // 支持JSON格式的请求体  
      
    // 定义一个用户路由  
    app.get('/users', (req, res) => {  
      // 处理获取用户列表的请求  
      const users = [  
        { id: 1, name: 'Alice' },  
        { id: 2, name: 'Bob' },  
        { id: 3, name: 'Charlie' },  
      ];  
      res.json(users);  
    });  
      
    app.get('/users/:id', (req, res) => {  
      // 处理获取特定用户信息的请求  
      const userId = req.params.id;  
      const user = { id: userId, name: `User ${userId}` };  
      res.json(user);  
    });  
      
    app.post('/users', (req, res) => {  
      // 处理创建新用户的请求  
      const newUser = req.body;  
      // 在这里执行保存用户到数据库等操作  
      res.status(201).json({ message: 'User created successfully.' });  
    });  
      
    // 启动应用程序监听端口  
    app.listen(3000, () => {  
      console.log('API接口已启动,监听端口3000...');  
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    执行以上代码:

    $ node express_demo.js 
    应用实例,访问地址为 API接口已启动,监听端口3000...
    
    • 1
    • 2

    在浏览器中访问 http://127.0.0.1:3000,结果如下图所示:

    在这里插入图片描述

    第二个 Express 框架实例

    创建 logger.js 文件,代码如下所示:

    const express = require('express');  
    const app = express();  
      
    // 定义一个简单的中间件  
    const loggerMiddleware = (req, res, next) => {  
      console.log(`Request URL: ${req.url}`);  
      next(); // 调用next函数以继续处理链  
    };  
      
    // 将中间件应用到应用程序中  
    app.use(loggerMiddleware);  
      
    // 定义一个路由  
    app.get('/', (req, res) => {  
      res.send('Hello, World!');  
    });  
      
    // 启动应用程序监听端口  
    app.listen(3001, () => {  
      console.log('应用程序已启动,监听端口3001...');  
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在上面的示例中,我们定义了一个简单的中间件loggerMiddleware,它在每个请求被处理之前记录请求的URL。通过app.use()方法,我们将中间件应用到应用程序中。当一个请求到达应用程序时,它会首先通过中间件,然后再到达路由处理函数。

    请注意,中间件函数通常接受三个参数:req(请求对象),res(响应对象)和next(下一个中间件函数)。中间件可以通过调用next()函数将控制权传递给下一个中间件或路由处理函数。

    执行以上代码:

    [root@node3 nodejs]# pm2 start logger.js --watch 
    [PM2] Starting /root/nodejs/logger.js in fork_mode (1 instance)
    [PM2] Done.
    
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    在浏览器中访问 http://127.0.0.1:3001,结果如下图所示:

    在这里插入图片描述

    6|logger   | 应用程序已启动,监听端口3000...
    6|logger   | Request URL: /
    6|logger   | Request URL: /favicon.ico
    
    
    • 1
    • 2
    • 3
    • 4
    Node.js 连接 MySQL

    要在Node.js中连接MySQL数据库,你可以使用mysql模块。首先,确保你已经安装了Node.js和MySQL服务器,并且数据库已经设置好并正在运行。你可以通过以下步骤在Node.js中连接MySQL数据库:

    1. 安装mysql模块:在命令行中运行以下命令来安装mysql模块:
    npm install mysql
    
    • 1
    1. 在Node.js代码中导入mysql模块:在你的Node.js代码中,导入mysql模块并创建一个数据库连接。
    const mysql = require('mysql');  
      
    // 创建数据库连接  
    const connection = mysql.createConnection({  
      host: 'localhost', // MySQL服务器地址  
      user: 'your_username', // MySQL用户名  
      password: 'your_password', // MySQL密码  
      database: 'your_database' // 要连接的数据库名称  
    });  
      
    // 连接数据库  
    connection.connect((err) => {  
      if (err) {  
        console.error('连接数据库失败:', err);  
        return;  
      }  
      console.log('成功连接到数据库');  
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    1. 关闭数据库连接:在你的代码完成与数据库的交互后,记得关闭数据库连接以释放资源。
    // 关闭数据库连接  
    connection.end();
    
    • 1
    • 2
    1. 数据库操作

      website.sql

      SET NAMES utf8;
      SET FOREIGN_KEY_CHECKS = 0;
      
      -- ----------------------------
      --  Table structure for `websites`
      -- ----------------------------
      DROP TABLE IF EXISTS `websites`;
      CREATE TABLE `websites` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `name` char(20) NOT NULL DEFAULT '' COMMENT '站点名称',
        `url` varchar(255) NOT NULL DEFAULT '',
        `alexa` int(11) NOT NULL DEFAULT '0' COMMENT 'Alexa 排名',
        `country` char(10) NOT NULL DEFAULT '' COMMENT '国家',
        PRIMARY KEY (`id`)
      ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
      
      -- ----------------------------
      --  Records of `websites`
      -- ----------------------------
      BEGIN;
      INSERT INTO `websites` VALUES ('1', 'Google', 'https://www.google.cm/', '1', 'USA'), ('2', '淘宝', 'https://www.taobao.com/', '13', 'CN'), ('3', '菜鸟教程', 'http://www.runoob.com/', '4689', 'CN'), ('4', '微博', 'http://weibo.com/', '20', 'CN'), ('5', 'Facebook', 'https://www.facebook.com/', '3', 'USA');
      COMMIT;
      
      SET FOREIGN_KEY_CHECKS = 1;
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      查询数据
      var mysql  = require('mysql');  
       
      var connection = mysql.createConnection({     
        host     : 'localhost',       
        user     : 'root',              
        password : '123456',       
        port: '3306',                   
        database: 'test' 
      }); 
       
      connection.connect();
       
      var  sql = 'SELECT * FROM websites';
      //查
      connection.query(sql,function (err, result) {
              if(err){
                console.log('[SELECT ERROR] - ',err.message);
                return;
              }
       
             console.log('--------------------------SELECT----------------------------');
             console.log(result);
             console.log('------------------------------------------------------------\n\n');  
      });
       
      connection.end();
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      插入数据
      var mysql  = require('mysql');  
       
      var connection = mysql.createConnection({     
        host     : 'localhost',       
        user     : 'root',              
        password : '123456',       
        port: '3306',                   
        database: 'test' 
      }); 
       
      connection.connect();
       
      var  addSql = 'INSERT INTO websites(Id,name,url,alexa,country) VALUES(0,?,?,?,?)';
      var  addSqlParams = ['菜鸟工具', 'https://c.runoob.com','23453', 'CN'];
      //增
      connection.query(addSql,addSqlParams,function (err, result) {
              if(err){
               console.log('[INSERT ERROR] - ',err.message);
               return;
              }        
       
             console.log('--------------------------INSERT----------------------------');
             //console.log('INSERT ID:',result.insertId);        
             console.log('INSERT ID:',result);        
             console.log('-----------------------------------------------------------------\n\n');  
      });
       
      connection.end();
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      更新数据
      var mysql  = require('mysql');  
       
      var connection = mysql.createConnection({     
        host     : 'localhost',       
        user     : 'root',              
        password : '123456',       
        port: '3306',                   
        database: 'test' 
      }); 
       
      connection.connect();
       
      var modSql = 'UPDATE websites SET name = ?,url = ? WHERE Id = ?';
      var modSqlParams = ['菜鸟移动站', 'https://m.runoob.com',6];
      //改
      connection.query(modSql,modSqlParams,function (err, result) {
         if(err){
               console.log('[UPDATE ERROR] - ',err.message);
               return;
         }        
        console.log('--------------------------UPDATE----------------------------');
        console.log('UPDATE affectedRows',result.affectedRows);
        console.log('-----------------------------------------------------------------\n\n');
      });
       
      connection.end();
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      删除数据
      var mysql  = require('mysql');  
       
      var connection = mysql.createConnection({     
        host     : 'localhost',       
        user     : 'root',              
        password : '123456',       
        port: '3306',                   
        database: 'test' 
      }); 
       
      connection.connect();
       
      var delSql = 'DELETE FROM websites where id=6';
      //删
      connection.query(delSql,function (err, result) {
              if(err){
                console.log('[DELETE ERROR] - ',err.message);
                return;
              }        
       
             console.log('--------------------------DELETE----------------------------');
             console.log('DELETE affectedRows',result.affectedRows);
             console.log('-----------------------------------------------------------------\n\n');  
      });
       
      connection.end();
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26

      在这里插入图片描述

  • 相关阅读:
    php Unicode编码格式案例
    Redis主从结构数据同步分析
    Three outline物体边界线条实例
    低代码如何提升开发人员的开发能力
    OpenFeign开启Hystrix时,实现服务间并且调用时传递header以及新增header, header透传
    windows10安装kali-linux指南(wsl),含kali桌面、中文
    【C++】-c++11的知识点(中)--lambda表达式,可变模板参数以及包装类(bind绑定)
    MLP算法及其实现
    操作系统——进程间通信——共享内存、消息队列、信号量
    VUE | key的内部原理、Vue监测数据的原理、Vue.set()和vm.$set()的使用
  • 原文地址:https://blog.csdn.net/RodJohnsonDoctor/article/details/133886379