自学WEB后端02-基于Express框架完成一个交互留言板!

news2024/11/25 16:22:48

提示:

浏览器V8是JavaScript的前端运行环境
Node.js 是JavaScript 的后端运行环境
Node.js 中无法调用 DOM 和 BOM等浏览器内置 API

这个作业案例包含2部分内容,

第一部分是前端

前端完成界面内容+CSS框架

第二部分是后端

完成用户留言存储,并返回

1.创建好文件夹目录

我这里为了方便放在了后端myapp目录里,创建了新文件夹放前端文件

通常情况下,前端文件(包括HTML、CSS和前端JavaScript)和后端文件(包括后端JavaScript、服务器配置等)应该放在不同的文件夹中,以便进行区分和管理。

可以按照以下方式组织文件夹结构:

- 网站项目文件夹 -

 -backend 

    server.js 

    myapp.js

- frontend 

  index.html

  style.css

  script.js - 

以上是一种常见的文件夹结构示例,其中backend文件夹用于存放后端文件(如server.js),而frontend文件夹则用于存放前端文件(如index.htmlstyle.cssscript.js等)。

请注意,这只是一种示例文件夹结构,你可以根据自己的需求和项目规模进行调整和扩展。

2.开始写前端代码

HTML 里面代码会通过路径调用对应CSS代码。如果没有CSS代码,也可以不用!

创建一个index.html

这次我们用py打开项目方便看到代码提示

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>留言板</title>
</head>
<body>
  <h1>留言板</h1>

  <div id="messages-container"></div>

  <form id="message-form">
    <input type="text" id="message-input" placeholder="输入留言">
    <button type="submit">发送</button>
  </form>

  <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.4.0/socket.io.js"></script>
  <script>
    const socket = io();

    // 显示已有的留言
    function displayMessages(messages) {
      const messagesContainer = document.getElementById('messages-container');

      messages.forEach((message) => {
        const messageElement = document.createElement('p');
        messageElement.textContent = message;
        messagesContainer.appendChild(messageElement);
      });
    }

    // 监听初始留言事件,显示已有的留言
    socket.on('initial_messages', (messages) => {
      displayMessages(messages);
    });

    // 监听广播的新留言事件,显示新的留言
    socket.on('broadcast_message', (message) => {
      const messagesContainer = document.getElementById('messages-container');
      const messageElement = document.createElement('p');
      messageElement.textContent = message;
      messagesContainer.appendChild(messageElement);
    });

    // 监听表单提交事件,发送新留言到服务器
    document.getElementById('message-form').addEventListener('submit', (event) => {
      event.preventDefault();
      const messageInput = document.getElementById('message-input');
      const message = messageInput.value.trim();

      if (message !== '') {
        socket.emit('new_message', message);
        messageInput.value = '';
      }
    });
  </script>
</body>
</html>

3.后端代码

创建一个新的 XXXX.js 文件,并将以下代码复制到其中:

这个脚本是后端的脚本!由JavaScript编写

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>留言板</title>
</head>
<body>
  <h1>留言板</h1>

  <div id="messages-container"></div>

  <form id="message-form">
    <input type="text" id="message-input" placeholder="输入留言">
    <button type="submit">发送</button>
  </form>

  <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.4.0/socket.io.js"></script>
  <script>
    const socket = io();

    // 显示已有的留言
    function displayMessages(messages) {
      const messagesContainer = document.getElementById('messages-container');

      messages.forEach((message) => {
        const messageElement = document.createElement('p');
        messageElement.textContent = message;
        messagesContainer.appendChild(messageElement);
      });
    }

    // 监听初始留言事件,显示已有的留言
    socket.on('initial_messages', (messages) => {
      displayMessages(messages);
    });

    // 监听广播的新留言事件,显示新的留言
    socket.on('broadcast_message', (message) => {
      const messagesContainer = document.getElementById('messages-container');
      const messageElement = document.createElement('p');
      messageElement.textContent = message;
      messagesContainer.appendChild(messageElement);
    });

    // 监听表单提交事件,发送新留言到服务器
    document.getElementById('message-form').addEventListener('submit', (event) => {
      event.preventDefault();
      const messageInput = document.getElementById('message-input');
      const message = messageInput.value.trim();

      if (message !== '') {
        socket.emit('new_message', message);
        messageInput.value = '';
      }
    });
  </script>
</body>
</html>

然后在py中右键运行这个后端js脚本(如果你没有用py打开)那么就需要用命令窗口(CMD

一个非常丑的留言板网站就出现了!

 (如果你没有用py打开)那么就需要用命令窗口(CMD

恭喜,第一次感受到前端和后端协调工作的结果!

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

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

相关文章

解密智能化评估在培训考试系统中的应用

智能化评估在培训考试系统中的应用旨在提供更全面和准确的评估方式&#xff0c;以帮助培训机构或个人评估学员的学习成果。该系统结合了现代技术和评估理论&#xff0c;能够自动化地进行评估、反馈和分析&#xff0c;提供个性化的学习支持和指导。 智能化评估系统通过采集学员…

【RK3588】Firefly 瑞芯微板子入门知识、和环境篇

公司买了块瑞芯微的移动开发板&#xff0c;准备将公司的主营业务的AI模型&#xff0c;从服务器主机&#xff0c;移动到开发板上面。所以&#xff0c;就选择了瑞芯微的RK3588的板子。 从目前市面上出现的板子来看&#xff0c;主要的还是以瑞芯微的板子为主&#xff0c;比如鸣辰…

Matlab写入nc文件遇到‘Start+count exceeds dimension bound (NC_EEDGE)‘问题的解决办法

最近在使用matlab写入nc文件&#xff0c;具体的处理视频可参见B站视频&#xff08;1.matlab处理nc文件--文件读取和写入_哔哩哔哩_bilibili&#xff09;但是遇到了以下的问题&#xff1a; Error using netcdflib The NetCDF library encountered an error during execution of…

2002-2020年341个地级市农业保险保费收入数据

2002-2020年341个地级市农业保险收入数据 1、时间&#xff1a;2002-2020年 2、范围&#xff1a;341个地级市 3、指标&#xff1a;农业保险收入 4、来源&#xff1a;整理自wind、保险年鉴 5、指标解释&#xff1a; 农业保险保费收入是指保险公司从农户或农业生产经营者那里…

伺服丝杠系统常用运算功能块

这篇博客主要介绍伺服、丝杠系统常用的运算功能块,其它相关运算可以查看下面文章链接: 信捷PLC脉冲频率、位移、转速相关计算(C语言编程应用)_RXXW_Dor的博客-CSDN博客里工业控制张力控制无处不在,也衍生出很多张力控制专用控制器,磁粉制动器等,本篇博客主要讨论PLC的张力…

【LeetCode热题100】--206.反转链表

206.反转链表 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/ clas…

分布式文件存储系统minio、大文件分片传输

上传大文件 1、Promise对象 Promise 对象代表一个异步操作&#xff0c;有三种状态&#xff1a; pending: 初始状态&#xff0c;不是成功或失败状态。fulfilled: 意味着操作成功完成。rejected: 意味着操作失败。 只有异步操作的结果&#xff0c;可以决定当前是哪一种状态&a…

【编译和链接——详解】

1. 翻译环境和运行环境&#x1f4bb; 在ANSI C的任何⼀种实现中&#xff0c;存在两个不同的环境。 第1种是翻译环境&#xff0c;在这个环境中源代码被转换为可执⾏的机器指令。 第2种是执⾏环境&#xff0c;它⽤于实际执⾏代码。 2. 翻译环境&#x1f4bb; 那翻译环境是怎么将…

【app篇】可拖拽BLE遥控app简单版本

可拖拽配置蓝牙控制app 忘记过去&#xff0c;超越自己 ❤️ 博客主页 单片机菜鸟哥&#xff0c;一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-09-26 ❤️❤️ 本篇更新记录 2023-09-26 ❤️&#x1f389; 欢迎关注 &#x1f50e;点赞 &#x1f44d;收藏 ⭐️留言&a…

全面解析“由于找不到msvcp140.dll无法继续执行代码”的5个解决方法

找不到 msvcp140.dll 文件可能会导致许多程序无法正常运行&#xff0c;这给许多用户带来了困扰。当您遇到由于找不到 msvcp140.dll 无法继续执行代码的问题时&#xff0c;您可以尝试以下方法来解决问题。 首先&#xff0c;了解 msvcp140.dll 文件的作用是很重要的。msvcp140.dl…

POI导入时经常碰到字段类型和导入的类型冲突

我们在用poi导入时导入的Excel列的字段类型经常和实体类里的不一致 //导入类 public class ImportVo {ExcelVOAttribute(name "名称",column"A")private String mc;ExcelVOAttribute(name "数量",column"B")private Integer sl;Exc…

WARNING:tensorflow:Your input ran out of data; interrupting training. 解决方法

问题详情&#xff1a; WARNING:tensorflow:Your input ran out of data; interrupting training. Make sure that your dataset or generator can generate at least steps_per_epoch * epochs batches (in this case, 13800 batches). You may need to use the repeat() funct…

CentOS 7 安装 Tomcat

CentOS 7 安装 Tomcat&#xff08;注意版本号要与自己的版本一致&#xff09; 在/usr/local/下新建文件夹tomcat&#xff1a; cd /usr/local/mkdir tomcatcd tomcat上传tomcat8.5到linux的/usr/local/tomcat下 进入tomcat文件夹下&#xff1a; cd /usr/local/tomcatyum安装…

tensor数学运算

运算函数加add减sub乘mul除div矩阵相乘matmul次方pow平方根及其倒数sqrt 和 rsqrt向下/向上取整floor / ceil分离出整数/小数trunc / frac近似解四舍五入round裁剪clamp 1、矩阵元素的加减乘除 注意是矩阵间对应位置元素进行加减乘除 add 和 a torch.rand(3,4) b torch.…

ardupilot开发 ---传感器驱动,外设驱动篇

ardupilot支持不同厂商的传感器&#xff0c;如雷达&#xff0c;声呐&#xff0c;激光&#xff0c;相机等&#xff1b; 支持的通信协议 I2C, SPI, UART (aka Serial) CANBUS 驱动程序的前后台分离 ardupilot中传感器驱动的重要结构是前后分离&#xff1b; Library库调用前端…

Solidity 小白教程:24. 在合约中创建新合约

Solidity 小白教程&#xff1a;24. 在合约中创建新合约 在以太坊链上&#xff0c;用户&#xff08;外部账户&#xff0c;EOA&#xff09;可以创建智能合约&#xff0c;智能合约同样也可以创建新的智能合约。去中心化交易所uniswap就是利用工厂合约&#xff08;Factory&#xf…

天软特色因子看板 (2023.09 第09期)

该因子看板跟踪天软特色因子A02002 (近一月尾盘成交占比(%))&#xff0c;该因子为近一个月尾盘成交量占比均值因子&#xff0c;用以刻画股票在收盘时&#xff0c;主力资金的流动影响。近一月尾盘成交占比(%)越小&#xff0c;表示多方或空方无力量。近一月尾盘成交占比(%)越大&a…

Day_16 结构体

目录 1.结构体 1.1结构体类型的声明 1.结构体的基础知识 2.结构的声明 3.特殊的声明 1.2结构的自引用 1.3结构体变量的定义和初始化 1.4结构体内存对齐 1.怎么对齐的 2.为什么要对齐 3.修改默认对齐数 1.5结构体传参 1.传值调用 2.传地址调用 3.结论 1.6结构…

SOLIDWORKS二次开发

SOLIDWORKS是一套三维设计软件, 采用特征建模、变量化驱动可方便地实现三维建模、装配和生成工程图。SOLIDWORKS软件本身所具有的交互方式&#xff0c;可以使用户对已生成模型的尺寸、几何轮廓和相互约束关系随时进行修改, 而不需要编程。SOLIDWORKS软件本身的方程式可以实现简…

订阅《复现SCI文章系列教程》

写在前面 《小杜生信笔记》准备开启新的订阅专栏**《复现期刊文章系列教程》&#xff0c;本专栏小杜会寻找一些自己感兴趣的文章进行复现&#xff08;不说百分之百的复现&#xff0c;但是也会百分之八十进行复现&#xff09;。本期刊的教程代码会全部进行公开&#xff08;通过订…