node ---- 02

node ---- 02

一. Node.js的框架 express

  • 使用express构建静态服务器[ 后端渲染 ]
  • 使用express构建api服务器【 接口 】

二. 前端通信【 socket 】

  • Node中完成通信功能
  • 扩展: H5的 webSocket 实现通信功能

1. express通过生成器 【 脚手架 】

  1. 作用: 可以帮助我们快速构建一个express项目

  2. 脚手架的安装

    • 全局安装

    • npx安装

  3. 脚手架的使用

  • 全局安装的使用

    • express -e 项目名称
  • npx的使用

    • npx express -e 项目名称
  1. 认识项目目录结构

在这里插入图片描述

    1. 先找package.json
      在这里插入图片描述
    1. 找到了项目启动文件 bin/www
      在这里插入图片描述
      • 它是通过http来做了一个服务器,默认端口是:3000
      • 这个文件中引入了一个app文件,这个文件是将createServer中的回调函数放到了外面,以模块化的形式使用的,这个文件我们叫它: ‘入口文件
    1. app.js
    • express是由路由和中间件构成的
      • 路由: 可以完成页面的连接或是接口的打造

      • 中间件: 中间件是一个函数,一个具有特定功能的函数

        • 中间件的参数
          • req : 全称: request 表示请求
          • res : 全称: response 表示响应
          • next: 表示request和response之间的连接 , 相当于桥梁的作用
            • next如果断开,那么请求和响应就会中断 next( false )
        • 中间件要想调用,必须通过app的use方法来调用
    1. 路由中间件
    • 路由中间件人家是以模块化的形式使用
      • routes/xx.js

      • res.render(‘index’)

        • 配置了模板的路径
        • 配置了后缀名省略
          在这里插入图片描述
    1. view/xxx.ejs

这是home.js文件:

const express = require('express');

const router = express.Router();

router.get('/', function(req, res, next) { 
    res.render('home', {
        data: {
            msg: '<h2>开始后端渲染数据</h2>',
            flag: true,
            kaola: [{
                id: "1",
                pic: [{ 'title': '列表展示1', 'src': '/images/p01-0.jpg' }, { 'title': '放大图1', 'src': '/images/p01-1.jpg' }, { 'title': '放大图2', 'src': '/images/p01-2.jpg' },{ 'title': '放大图3', 'src': '/images/p01-3.jpg' }, { 'title': '缩小图1', 'src': '/images/p01-1s.jpg' },{ 'title': '缩小图2', 'src': '/images/p01-2s.jpg' },{ 'title': '缩小图3', 'src': '/images/p01-3s.jpg' },{ 'title': '购物车展示', 'src': '/images/p01-g.jpg' }],
                price: "56.00",
                title: "【111便宜大碗】Naturie imju 薏仁亮白保湿防晒化妆水 500毫升"
            }, {
                id: "2",
                pic: [{ "title": "列表展示", "src": "/images/p02-0.jpg" }, { "title": "放大图1", "src": "/images/p02-1.jpg" }, { "title": "放大图2", "src": "/images/p02-2.jpg" },{ "title": "放大图3", "src": "/images/p02-3.jpg" }, { "title": "缩小图1", "src": "/images/p02-1s.jpg" },{ "title": "缩小图2", "src": "/images/p02-2s.jpg" },{ "title": "缩小图3", "src": "/images/p02-3s.jpg" },{ "title": "购物车展示", "src": "/images/p02-g.jpg" }],
                price: "87.00",
                title: "222Papa recipe 春雨 蜂蜜补水保湿面膜 25克/片 10片装 当红爆款"
            }, {
                id: "3",
                pic: [{ "title": "列表展示", "src": "/images/p03-0.jpg" }, { "title": "放大图1", "src": "/images/p03-1.jpg" }, { "title": "放大图2", "src": "/images/p03-2.jpg" },{ "title": "放大图3", "src": "/images/p03-3.jpg" }, { "title": "缩小图1", "src": "/images/p03-1s.jpg" },{ "title": "缩小图2", "src": "/images/p03-2s.jpg" },{ "title": "缩小图3", "src": "/images/p03-3s.jpg" },{ "title": "购物车展示", "src": "/images/p03-g.jpg" }],
                price: "129.00",
                title: "Swisse 奶蓟草护肝片 120片/瓶【拯救熬夜的肝】"
            }, {
                id: "4",
                pic: [{ "title": "列表展示", "src": "/images/p04-0.jpg" }, { "title": "放大图1", "src": "/images/p04-1.jpg" }, { "title": "放大图2", "src": "/images/p04-2.jpg" },{ "title": "放大图3", "src": "/images/p04-3.jpg" }, { "title": "缩小图1", "src": "/images/p04-1s.jpg" },{ "title": "缩小图2", "src": "/images/p04-2s.jpg" },{ "title": "缩小图3", "src": "/images/p04-3s.jpg" },{ "title": "购物车展示", "src": "/images/p04-g.jpg" }],
                price: "49.90",
                title: "【日本版黑色】KISS ME 奇士美 花漾美姬梦幻泪眼防水眼线液笔 0.1极细0.4毫"
            }, {
                id: "5",
                pic: [{ "title": "列表展示", "src": "/images/p05-0.jpg" }, { "title": "放大图1", "src": "/images/p05-1.jpg" }, { "title": "放大图2", "src": "/images/p05-2.jpg" },{ "title": "放大图3", "src": "/images/p05-3.jpg" }, { "title": "缩小图1", "src": "/images/p05-1s.jpg" },{ "title": "缩小图2", "src": "/images/p05-2s.jpg" },{ "title": "缩小图3", "src": "/images/p05-3s.jpg" },{ "title": "购物车展示", "src": "/images/p05-g.jpg" }],
                price: "119.00",
                title: "innisfree 悦诗风吟 绿茶精萃水乳两件套装"
            }]
        }
    });
});

module.exports = router;

这是home.ejs模板文件
在这里插入图片描述

    1. ejs语法
      • 注意: ejs语法符号是不能换行的
      • 非转义输出 <%- %> 可以解析xml类型数据
      • 转义输出 <%= %> 可以解析普通类型数据
      • 流程控制 <% %>
        • if条件语句
        • 循环语句

通过express来打造api服务器【 后端接口 】

  1. 步骤
    1. 通过脚手架搭建项目
      1.1 创建项目 npx express -e 目录名

    2. 创建接口

      /* 
        这里的路由将作为将来的后端接口
      */
      
      const express = require( 'express' )
      
      const router = express.Router() 
      
      
      //接下来我们打造接口 ,使用restful api
      
        router.route('/position')
          .post((req,res,next) => {// post增
            res.setHeader('Access-Control-Allow-Origin','*')
            res.render('position',{
              data: JSON.stringify({ //以字符串的形式传递数据
                info: 'post',
                status: 200,
                name: 'bvdf'
              })
            })
          })
          .delete((req,res,next) => {//删
            res.setHeader('Access-Control-Allow-Origin','*')
      
            res.render('position',{
              data: JSON.stringify({
                info: 'delete',
                status: 200,
                name: 'bvdf'
              })
            })
          })
          .put((req,res,next) => {//改
            res.setHeader('Access-Control-Allow-Origin','*')
      
            res.render('position',{
              data: JSON.stringify({
                info: 'put',
                status: 200,
                name: 'bvdf'
              })
            })
          })
          
          .get((req,res,next) => {//查
            res.setHeader('Access-Control-Allow-Origin','*')
      
            res.render('position',{
              data: JSON.stringify({
                info: 'get',
                status: 200,
                name: 'bvdf'
              })
            })
          })
      module.exports = router 
      
  • 接口的打造需要遵循一个规则: restful api

      // 接口只有一个,但是数据请求方式多个 
       http://localhost:3000/shop
          get请求    查询
          post请求   增加一个商品
          delete请求 删除一个商品
          put 请求   修改一个商品信息
    
    1. 接口测试
    • 3.1 使用测试用具来测试

      • insomina
        3.1.1 测试前启动项目
        3.1.2 npm start之前别忘了要做下面的操作:3.1.3和 3.1.4
        3.1.3 在app.js中使用
      var positionRouter = require('./routes/position');
      app.use('/',positionRouter);
      

      3.1.4 为了可以实时监听
      修改 package.json中的

      "start": "nodemon ./bin/www"
      
    • 3.2 前端进行接口数据请求

      3.2.1 新建前端文件夹以及html文件

      	
      	    <h1>前端请求</h1>
      	    <button>点击发送请求</button>
      	    <script src="https://cdn.bootcss.com/jquery/1.9.1/jquery.min.js"></script>
      	    <script>
      	        $(function(){
      	            $('button').on('click',function(){
      	                $.ajax({
      	                    type: "get",
      	                    url: "http://localhost:3000/position",
      	                    success: function (res) {
      	                        console.log(JSON.parse(res));
      	                    }   
      	                });
      	            })
      	        })
      	    </script>
      

      3.2.2 发Ajax请求肯定会出现跨域问题

      • 跨域问题解决:

        • 用设置请求头的方式解决跨域

        • 使用中间件 cors [ 第三方模块 ]
          2.1 cnpm i cors -S
          2.2 app.js文件引入

        2.3 统一设置跨域

              app.use(cors({
                "origin": "*",
                "methods": "GET,HEAD,PUT,PATCH,POST,DELETE",
                "preflightContinue": false,
                "optionsSuccessStatus": 200
              }))
        
      1. 反向代理解决跨域

        在前端服务器中短暂的开启一个后端,让这个后端帮助我们请求数据,然后在返回给前端

        使用一个叫做 request 的(第三方)模块进行数据请求

        
        const request = require('request');
        const express = require('express');
        const app = express();
        const port = 5000;
        const hostname = 'localhost';
        
        app.get('/user', (req, res, next) => { 
         
            res.setHeader('Access-Control-Allow-Origin', '*');
            request('https://m.lagou.com/listmore.json', function(error, response, body) {
                res.json(JSON.parse(body));
            });
        })
        
        app.listen(port, hostname, () => {
            console.log(`接口服务器为: http://${hostname}:${port}`);
        });
        
<think>我们正在讨论如何查看Kubernetes集群中所有节点的标签信息。根据引用[1]和引用[2],我们可以使用`kubectl get nodes --show-labels`命令来查看所有节点的标签信息。这个命令会在输出中增加一列`LABELS`,显示每个节点的标签。 此外,引用[1]还提供了其他一些查看节点信息的命令,例如: - `kubectl get nodes`:查看所有节点的基本信息。 - `kubectl get nodes -owide`:查看所有节点的更详细信息。 - `kubectl get node -o yaml`:查看所有节点的YAML格式信息,其中也包含标签信息。 - `kubectl get node master01 -o yaml`:查看特定节点(如master01)的YAML格式信息。 引用[2]则提醒我们,同一个节点上同类型的标签只能设置一个,如果重复设置会报错。例如,不能给同一个节点设置两个`env`标签,否则会冲突。 另外,引用[3]展示了如何使用节点标签进行Pod调度,即在Pod的部署描述(Deployment)中通过`nodeSelector`指定节点标签,这样Pod就会被调度到具有相应标签的节点上。 因此,针对用户的问题,我们可以直接回答使用`kubectl get nodes --show-labels`命令,并给出示例输出和解释。同时,我们也可以提供一些相关的命令变体,以便用户根据需求选择。 下面我们按照要求组织回答:</think>### 查看 Kubernetes 节点标签的命令 要查看集群中所有节点的标签信息,请使用以下命令: ```bash kubectl get nodes --show-labels ``` **输出示例**: ```bash NAME STATUS ROLES AGE VERSION LABELS master01 Ready master 30d v1.25.4 node-role.kubernetes.io/master=,env=prod worker-01 Ready <none> 30d v1.25.4 env=uat,app=web worker-02 Ready <none> 30d v1.25.4 env=prod,disk=ssd ``` **关键列说明**: - `NAME`:节点名称 - `LABELS`:标签键值对(如 `env=prod`)[^1][^2] --- ### 其他常用标签操作 1. **筛选特定标签的节点**: ```bash kubectl get nodes -l env=prod --show-labels # 查看 env=prod 的节点 ``` 2. **查看标签的原始数据格式**: ```bash kubectl get nodes -o yaml # 包含完整的 labels 字段[^1] ``` 3. **添加/修改节点标签**: ```bash kubectl label nodes worker-01 disk=ssd # 添加标签(需确保标签唯一性)[^2] ``` 4. **删除节点标签**: ```bash kubectl label nodes worker-01 disk- # 删除 disk 标签 ``` --- ### 标签的核心作用 1. **Pod 定向调度**: 在 Deployment 中通过 `nodeSelector` 指定标签,将 Pod 调度到匹配节点[^3]: ```yaml spec: nodeSelector: env: uat # 仅调度到 env=uat 的节点 ``` 2. **节点分组管理**: 如 `env=prod` 区分生产环境节点,`disk=ssd` 标识 SSD 存储节点[^2]。 --- ### 注意事项 - **标签键唯一性**:同一节点不能重复设置同名标签(如两个 `env` 标签)[^2] - **标签格式限制**:键名需符合 DNS 子域名规则(如不能包含大写字母) - **批量操作**:使用 `xargs` 批量添加标签: ```bash kubectl get nodes -o name | xargs -I{} kubectl label {} region=us-east ``` --- ### 相关问题 1. **如何通过节点标签实现 Pod 的高可用部署?**(如跨 `zone` 标签调度) 2. **节点标签(Labels)和注解(Annotations)有何本质区别?各自适用什么场景?** 3. **如何快速检查集群中是否存在重复标签的节点?** 4. **节点亲和性(Affinity)与 `nodeSelector` 在调度策略上有哪些进阶优势?**[^3]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值