express入门03增删改查

news2025/4/7 18:14:07

目录

  • 1 搭建服务器
  • 2 静态文件托管
  • 3 引入bootstrap
  • 4 引入jquery
  • 5 编写后端接口
    • 5.1 添加列表查询方法
    • 5.2 添加路由
    • 5.3 添加数据表格
  • 总结

我们前两篇介绍了如何利用express搭建服务器,如何实现静态资源托管。那利用这两篇的知识点,我们就可以实现一个小功能。通常我们的管理系统是由模块组成的,而模块是由功能点组成。功能点分为四个基础的部分,包括增加、修改、删除、查看。

其实开发后台管理系统,就是利用这四个基本功能点来进行各种组合,来实现我们的业务目标,先看一下我们这一次的实战案例的效果
在这里插入图片描述
我们有一个表格,表示用户管理,可以进行添加用户,也可以进行删除。

1 搭建服务器

首先呢需要搭建一下服务器,先创建一个工程目录,我们叫usermanager
在这里插入图片描述
创建好之后用我们的vscode打开这个目录
在这里插入图片描述
先需要初始化一下项目,使用npm init命令进行初始化

npm init

在这里插入图片描述
然后创建一个app.js作为我们服务器的启动文件
在这里插入图片描述
先安装一下express的包,在命令行输入npm i express

npm i express

在这里插入图片描述
然后在app.js里输入启动服务器的命令,启动我们的服务器

const express = require('express')
const app = express()
app.listen(3000, () => {
    console.log('server is running on port 3000')
})

第一句命令是我们需要引入我们的express的包

第二句是创建express

第三句是启动服务,监听3000端口

代码写好之后,在命令行输入nodemon app.js启动我们的服务器

nodemon app.js

在这里插入图片描述
使用这个插件去启动的好处是,如果我们修改了代码,会自动帮我们重启,省了不少事情

使用之前需要进行一下安装

npm i nodemon -g

后边-g表示全局安装,你下次再创建新项目的时候就不需要再安装这个包了

2 静态文件托管

我们这个实战案例是一个单体架构,所谓的单体架构是前端和后端代码都是在一个目录下,和目前前后端分离,部署两个项目还是不同的。

在项目的根目录下创建一个public文件夹,表示我们的静态文件的目录
在这里插入图片描述
一般静态文件是三种,分别是html、css、js,当然有时候还会有一些图片,我们使用images目录,在public目录下创建css、javascript、images这几个文件夹
在这里插入图片描述
在public目录下创建index.html
在这里插入图片描述
可以下载一些头像,放到images文件夹下
在这里插入图片描述
在app.js中我们将pulbic目录作为我们静态托管的目录,输入如下代码

app.use(express.static('public'))

在这里插入图片描述
这个时侯在浏览器使用http://localhost:3000访问可以看到我们的Html页面的内容已经显示出来
在这里插入图片描述

3 引入bootstrap

表格和新增表单的样式,我们使用bootstrap这个框架来实现,找到bootstarp的官方网址,下载最新版本
bootstrap最新版本
在这里插入图片描述
将下载好的包解压缩
在这里插入图片描述
在public目录下创建一个bootstrap文件夹,将css和js文件夹拷贝进来
在这里插入图片描述

4 引入jquery

操作dom我们使用jquery库,打开jquery的网址官方网站
在这里插入图片描述
在这里插入图片描述
注意这个库的下载方法是在按钮上点击右键,另存为
在这里插入图片描述
将库下载到我们的JavaScript目录下
在这里插入图片描述
回到我们的index.html文件下,将bootstrap和jquery引入到页面中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./bootstrap/css/bootstrap.css">
    <script src="./bootstrap/js/bootstrap.bundle.js"></script>
    <script src="./javascript/jquery-3.7.1.min.js"></script>
</head>
<body>
    静态网页托管
</body>
</html>

5 编写后端接口

在页面上操作的时候,其实是需要访问后端接口的,我们这里使用模块来开发后端接口。在根目录下创建一个model文件夹
在这里插入图片描述
下边创建一个UserModel.js
在这里插入图片描述
先用对象的语法创建我们的类

class UserModel{
    constructor(){
        this.userList = [{
            id:1,
            name:'zhangsan',
            age:20,
            sex:'男',
            address:'北京',
            phone:'13800000000',
            email:'233888@qq.com',
            avatar:'images/1.png'
        },{
            id:2,
            name:'lisi',
            age:18,
            sex:'女',
            address:'上海',
            phone:'13900000000',
            email:'233888@qq.com',
            avatar:'images/2.png'
        },{
            id:3,
            name:'wangwu',
            age:21,
            sex:'男',
            address:'广州',
            phone:'13700000000',
            email:'233888@qq.com',
            avatar:'images/3.png'
        }];
    }
}

module.exports = UserModel;

我们先用class关键字创建了一个类,用构造方法我们初始化了一组用户的数据,最后用模块的导出语法将类导出,这样在其他模块中可以进行导入

5.1 添加列表查询方法

在类中我们添加一个查询全部数据的方法

getUsers(){
        return {code:200,msg:'获取成功',data:this.userList};
    }

这个方法比较简单直接返回我们的用户列表就可以,这里我们按照json的格式构造了返回的结果,code用200表示成功,data是我们具体的数据
在这里插入图片描述

5.2 添加路由

接口有了之后,需要创建路由来调用我们的接口,在app.js里我们创建一个获取用户的路由,路由地址为/user/list

app.get('/user/list', (req, res) => {
    const users = userModel.getUsers()
    res.send(users)
})

在这里插入图片描述
路由添加好之后,我们用PostMan测试一下我们的接口
在这里插入图片描述
可以看到我们的接口已经正常返回数据了

5.3 添加数据表格

在html页面里,我们使用table组件来展示我们的列表的内容,因为已经引入了bootstrap,所以可以添加一些样式让页面变得更好看一点

<div class="container">
        <h2>用户管理</h2>
        <table class="table">
            <thead>
                <th>用户名</th>
                <th>年龄</th>
                <th>性别</th>
                <th>地址</th>
                <th>手机</th>
                <th>邮箱</th>
                <th>操作</th>
            </thead>
            <tbody>

            </tbody>
        </table>
    </div>

现在表格已经显示出了表头
在这里插入图片描述
页面加载的时候我们要访问后端接口获取数据,我们定义一个getUserList方法用来请求后端的数据

function getUserList(){
        $.ajax({
            url:BASE_URL+'/user/list',
            type:'get',
            dataType:'json',
            success:function(res){
                const userList = res.data
                let htmlStr ='';
                htmlStr = userList.reduce((html,item)=>{
                    return html+=`<tr>
                        <td>${item.name}</td>
                        <td>${item.age}</td>
                        <td>${item.sex}</td>
                        <td>${item.address}</td>
                        <td>${item.phone}</td>
                        <td>${item.email}</td>
                        <td><image src="${item.avatar}" width="40" height="40"/></td>
                        <td><button>删除</button></td>
                    </tr>`
                },"");
                $('tbody').html(htmlStr);
            }
        })
    }

这里通过jquery发送异步请求,来调用后端的接口获取数据,返回的数据我们通过模板字符串来拼接我们的表格的行数据,最终将拼接好的字符串渲染到tbody里

然后在页面加载的时候,调用我们的方法用来初始化表格数据

$(()=>{
        getUserList();
    })

这个时候再刷新页面的时候数据就被加载出来了
在这里插入图片描述
删除和添加的思路和列表查询类似,也是遵循先写后端接口,然后实现前端的调用

总结

本篇我们以一个实际的案例重新复习了一下我们前两篇学习过的知识点,在自己做架构的时候需要按照业务述求选用合适的前后端框架,其实使用bootstarp+jquery也是一种不错的选择。

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

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

相关文章

WebSocket 快速入门 与 应用

WebSocket 是一种在 Web 应用程序中实现实时、双向通信的技术。它允许客户端和服务器之间建立持久性的连接&#xff0c;以便可以在两者之间双向传输数据。 以下是 WebSocket 的一些关键特点和工作原理&#xff1a; 0.特点&#xff1a; 双向通信&#xff1a;WebSocket 允许服务…

艾宾浩斯winform单词系统+mysql

为用户提供集词典、题库、记忆单词功能于一体的应用&#xff0c;为用户提供目的性强、科学高效、多样化的记忆单词方法&#xff0c;使用户学习英语和记忆单词的效率得到提高 单词记忆模块 管理模块 查询单词 阅读英文 查看词汇 记忆单词 收藏单词 字段管理设置 统计 艾宾浩斯wi…

springBoot多数据源使用、配置

又参加了一个新的项目&#xff0c;虽然是去年做的项目&#xff0c;拿来复用改造&#xff0c;但是也学到了很多。这个项目会用到其他项目的数据&#xff0c;如果调用他们的接口取数据&#xff0c;我还是觉得太麻烦了。打算直接配置多数据源。 然后去另一个数据库系统中取出数据…

【C语音 || 数据结构】二叉树--堆

文章目录 前言堆1.1 二叉树的概念1.2 满二叉树和完美二叉树1.3 堆的概念1.4 堆的性质1.4 堆的实现1.4.1堆的向上调整算法1.4.1堆的向下调整算法1.4.1堆的接口实现1.4.1.1堆的初始化1.4.1.2堆的销毁1.4.1.3堆的插入1.4.1.4堆的删除1.4.1.4堆的判空1.4.1.4 获取堆的数据个数 前言…

当客户一上来就问你产品价格,你可以多尝试问问

做外贸业务&#xff0c;每个对产品不了解的客户&#xff0c;很多人一上来都会习惯性地问我们价格。一些新手业务会比较直接&#xff0c;一下子就把价格报出去了&#xff0c;很容易因为报错价格导致客户杳无音讯。 其实这个时候&#xff0c;我们最应该做的是尝试跟客户多聊一聊…

vuInhub靶场实战系列--Kioptrix Level #4

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置1.1 靶场信息1.2 靶场配置 二、信息收集2.1 主机发现2.1.1 netdiscover2.1.2 arp-scan主机扫描 2.2 端口扫描2.3 指纹识别2.4 目…

MySQL-子查询(DQL 结束)

054-where后面使用子查询 什么是子查询 select语句中嵌套select语句就叫做子查询。select语句可以嵌套在哪里&#xff1f; where后面、from后面、select后面都是可以的。 select ..(select).. from ..(select).. where ..(select)..where后面使用子查询 案例&#xff1a;找…

国际贸易条件简称的解析说明

声明&#xff1a;本文仅代表作者观点和立场&#xff0c;不代表任何公司&#xff01;仅用于SAP软件应用学习参考。 SAP创建销售订单的界面有个国际贸易条件的字段&#xff0c;这个字段选择值主要有如下选择值&#xff0c;国际贸易条件简称的具体解析说明如下&#xff1a; EXW &…

【文档智能】包含段落的开源的中文版面分析模型

github&#xff1a;https://github.com/360AILAB-NLP/360LayoutAnalysis 权重下载地址&#xff1a;https://huggingface.co/qihoo360/360LayoutAnalysis 一、背景 在当今数字化时代&#xff0c;文档版式分析是信息提取和文档理解的关键步骤之一。文档版式分析&#xff0c;也…

数据价值管理-数据验收标准

前情提要&#xff1a;数据价值管理是指通过一系列管理策略和技术手段&#xff0c;帮助企业把庞大的、无序的、低价值的数据资源转变为高价值密度的数据资产的过程&#xff0c;即数据治理和价值变现。第一讲介绍了业务架构设计的基本逻辑和思路。前面我们讲完了数据资产建设标准…

零售业上云为什么首选谷歌云

零售业是国民经济的重要组成部分&#xff0c;在促进经济发展、改善人民生活水平方面发挥着重要作用。零售业也是一个竞争激烈的行业&#xff0c;零售企业需要不断创新经营方式、提高服务质量才能在竞争中立于不败之地。 近年来&#xff0c;中国企业在品牌出海方面&#xff0c;一…

大模型 - Langchain-Chatchat小白本地部署踩坑血泪史

环境介绍 windows 11python 3.9.9显卡 GTX970 4G显存 &#xff08;可怜巴巴&#xff09;内存 24G 一、下载 Langchain-Chatchat 注意&#xff1a;这里先不要执行依赖下载&#xff0c;如果项目是通过 PyCharm 打开&#xff0c;就不要着急下载依赖&#xff0c;跟着往下面走&am…

算法第六天:力扣第977题有序数组的平方

一、977.有序数组的平方的链接与题目描述 977. 有序数组的平方的链接如下所示&#xff1a;https://leetcode.cn/problems/squares-of-a-sorted-array/description/https://leetcode.cn/problems/squares-of-a-sorted-array/description/ 给你一个按 非递减顺序 排序的整数数组…

【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt窗口 | 标准对话框 | 输入对话框QInputDialog 文章编号&#xff1a;…

vue3+electron搭建桌面软件

vue3electron开发桌面软件 最近有个小项目, 客户希望像打开 网易云音乐 那么简单的运行起来系统. 前端用 Vue 会比较快一些, 因此决定使用 electron 结合 Vue3 的方式来完成该项目. 然而, 在实施过程中发现没有完整的博客能够记录从创建到打包的流程, 摸索一番之后, 随即梳理…

图的遍历介绍

概念 特点 无论是进行哪种遍历&#xff0c;均需要通过设置辅助数组标记顶点是否被访问来避免重复访问&#xff01;&#xff01;&#xff01;&#xff01; 类型 深度优先遍历 可以实现一次遍历访问一个连通图中的所有顶点&#xff0c;只要连通就能继续向下访问。 因此&#x…

getDay 与 getUTCDay 本质区别

背景 我在做这个实验的时候是北京时间&#xff1a;2024年6月12日 下午16&#xff1a;32分许 研究方向 本文探讨 getDay 与 getUTCDay 本质区别 测试用例 如果你现在的时区设置的是 &#xff08;UTC08:00&#xff09; 北京&#xff0c;重庆&#xff0c;香港特别行政区&#x…

二刷算法训练营Day29 | 回溯算法(5/6)

目录 详细布置&#xff1a; 1. 491. 非递减子序列 2. 46. 全排列 3. 47. 全排列 II 详细布置&#xff1a; 1. 491. 非递减子序列 给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序…

智能盒子如何检测进气压力传感器?

进气压力传感器是一种用于测量发动机进气系统中压力的传感器。安装在发动机的进气管路或进气歧管上&#xff0c;用于监测进气压力的变化。进气压力传感器的作用是将测量到的压力信号转换为电信号&#xff0c;以便发动机控制单元(ECU)可以根据压力变化来调整燃油喷射量、点火时机…

[ue5]建模场景学习笔记(6)——必修内容可交互的地形,交互沙(4)

1.需求分析&#xff1a; 现在我们已经有了可以在世界内近于无限的跑动痕迹&#xff0c;现在需要对痕迹进行细化&#xff0c;包括例如当人物跳起时便不再绘制痕迹&#xff0c;以及痕迹应该存在深浅&#xff0c;应该由两只脚分别绘制&#xff0c;同时也应该对地面材质进行进一步处…