express入门03增删改查

目录

  • 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也是一种不错的选择。

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

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

相关文章

如何手动实现multiSetIfAbsent、multiExpire

👽System.out.println(“👋🏼嗨,大家好,我是代码不会敲的小符,目前工作于上海某电商服务公司…”); 📚System.out.println(“🎈如果文章中有错误的地方,恳请大家指正!共同进步,共同成长✊”); 🌟System.out.println(“💡如果文章对您有所帮助,希望您可以三…

Multimodal Dynamics:用于多模态融合背景下的分类

Multimodal Dynamics&#xff08;MD&#xff09;是可信赖的多模态分类算法&#xff0c;该算法动态评估不同样本的特征级和模态级信息量&#xff0c;从而可信赖地对多模态进行融合。 来自&#xff1a;Multimodal Dynamics: Dynamical Fusion for Trustworthy Multimodal Classi…

2、python 基础学习总结

文章目录 一、python 标识符和变量命名规则1、python 标识符2 python 变量和变量命名规则 二、数据类型2.1 Numbers&#xff08;数字类型&#xff09;2.2 String&#xff08;字符串类型&#xff09;2.2.1 单引号、双引号、三引号字符串之间的区别2.2.2 转义字符 在这里插入图片…

PDU模块中浪涌保护模块与空开模块的应用

由于PDU具体应用的特殊性&#xff0c;其在规划设计时具有应用场景的针对性&#xff0c;同时PDU的高度定制化的特点&#xff0c;是其他电气联接与保护产品所不具备的。 PDU基础的输出输入功能外&#xff0c;其电路的控制与电压保护器同时也极为重要。空气开关和浪涌保护器相关功…

自动驾驶场景下TCP协议参数优化调整案例分享

RTT 往返时间&#xff0c;从tcp协议栈决定发包&#xff0c;到收到回包的时间。 包含本地驱动&#xff0c;网卡硬件&#xff0c;网线&#xff0c;交换机&#xff0c;收包方处理的耗时。需注意如果开了delayed ack&#xff0c;协议栈未做特殊处理&#xff08;默认没做&#xff…

GEO ISP图像调试-PFC(蓝紫边校正)

目录 1、简单介绍 2、调试策略 3、输出结果 1、简单介绍 GEO中中调整图像蓝紫边可分为两步&#xff0c;第一步&#xff1a;调整蓝紫边检测区域&#xff0c;第二步&#xff1a;设置去蓝紫边强度。 2、调试策略 图1 该图像蓝紫边较严重 主要原因是由于蓝紫边检测不准导致的&…

汽车行驶中是怎么保障轴瓦安全的?

汽车轴瓦是一种用于减少摩擦和支撑转动部件的关键零部件&#xff0c;通常用于发动机的曲轴、凸轮轴等转动部件上。主要作用是减少转动部件之间的摩擦&#xff0c;支撑和保护曲轴、凸轮轴等旋转部件&#xff0c;确保它们在高速旋转时的稳定性和耐用性。 在汽车轴瓦加工过程中&am…

Jemeter做性能测试

目录 1. 测试计划 2. 线程组 3. HTTP请求 4. 查看结果树 5. 聚合报告 【要求】 用JMeter取样器&#xff0c;实现对云边AI (qinzhi.xyz)的访问 【步骤】 1. 测试计划 2. 线程组 右击测试计划——添加——线程(用户)——线程组 3. HTTP请求 右击线程组——添加——取样…

基于C#开发web网页管理系统模板流程-参数传递

点击返回目录-> 基于C#开发web网页管理系统模板流程-总集篇-CSDN博客 前言 当用户长时间未在管理系统界面进行操作&#xff0c;或者用户密码进行了更改&#xff0c;显然用户必须重新登录以验证身份&#xff0c;如何实现这个功能呢&#xff1f; HTTP Cookie&#xff08;也叫 …

meilisearch,老版本的文档

Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重量级&#xff0c;适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求&#xff0c;极快&#xff0c;单文件&#xff0c;超轻量。 所以&#xff0c;对于中小型项目来说…

物业抄表与收费系统的现代化解决方案

1.系统简述 物业抄表与收费系统是当代物业管理方法不可或缺的一部分&#xff0c;它通过自动化的形式&#xff0c;高效地管理方法电力能源使用数据&#xff0c;提升收费标准高效率&#xff0c;降低人为失误&#xff0c;同时提供数据统计分析适用。该系统不但优化了物业企业的日…

单目标应用:基于人工原生动物优化器APO的微电网优化(MATLAB代码)

一、微电网模型介绍 微电网多目标优化调度模型简介_vmgpqv-CSDN博客 参考文献&#xff1a; [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 二、人工原生动物优化算法求解微电网 2.1算法简介 人工原生动物优化器&am…

CorelDRAW2024官方最新中文破解版Crack安装包网盘下载安装方法

在设计的世界里&#xff0c;软件工具的更新与升级总是令人瞩目的焦点。近期&#xff0c;CorelDRAW 2024中文版及其终身永久版的发布&#xff0c;以及中文破解版Crack的出现&#xff0c;再次掀起了设计圈的热潮。对于追求专业精确的设计师而言&#xff0c;了解这些版本的下载安装…

一文读懂IP地址隔离

一、IP地址隔离的概念和原理 当我们谈论 IP 地址隔离时&#xff0c;我们实际上是在讨论一种网络安全策略&#xff0c;旨在通过技术手段将网络划分为不同的区域或子网&#xff0c;每个区域或子网都有自己独特的 IP 地址范围。这种划分使网络管理员可以更精细地控制哪些设备或用…

[12] 使用 CUDA 进行图像处理

使用 CUDA 进行图像处理 当下生活在高清摄像头的时代&#xff0c;这种摄像头能捕获高达1920*1920像素的高解析度画幅。想要实施的处理这么多的数据&#xff0c;往往需要几个TFlops地浮点处理性能&#xff0c;这些要求CPU也无法满足通过在代码中使用CUDA&#xff0c;可以利用GP…

简单项目——前后端分离实现博客系统

文章目录 一、项目实现的准备工作二、数据库的设计以及构建三、封装数据库连接、创建实体类四、封装数据库的增删查改操作五、实现博客系统核心操作1.获取博客列表页2.获取博客详情页3. 实现博客登录页4. 实现所有页面检查并强制登录5.退出登录状态6. 实现博客发布7. 实现删除文…

联想电脑 调节屏幕亮度不起使用,按F5,F6,屏幕上的hotkeys进度条是在改变,但是屏幕没有一些作用的处理方法

1、查看驱动是否正常 Win键X &#xff0c;设备管理器 发现似乎挺正常的。 查看原厂驱动&#xff1a;联想电脑管家 这样看来&#xff0c;驱动是没有问题了。 2、看看设置电池模式 其实还是这个电池模式的问题导致。 如果处于养护模式的话&#xff0c;充电只在75%~80%&#x…

重生之 SpringBoot3 入门保姆级学习(18、事件驱动开发解耦合)

重生之 SpringBoot3 入门保姆级学习&#xff08;18、事件驱动开发解耦合&#xff09; 5、SpringBoot3 核心5.1 原始开发5.2 事件驱动开发 5、SpringBoot3 核心 5.1 原始开发 LoginController package com.zhong.bootcenter.controller;import com.zhong.bootcenter.service.A…

嵌入式实训day2

1、 counteval(input("请输入两位数")) jincount//16 liangcount%16 print(jin,"斤",liang,"两") 2、 numeval(input("请输入一个三位数:")) res0 resnum%10 resnum%100//10 resres//100 print("res",res) 3、 4、字符串比大…

一个Anki填空题模板

Anki自带的填空题模板无法输入答案&#xff0c;显示也极为简陋。通过对Anki自带的填空题模板进行改造&#xff0c;做出了下面的填空题模板。这个模板有两个字段——题面和章节。前者保存题目及正确答案&#xff0c;后者保存与本题相关的知识在教材中的章节。题面可以用类似{{c1…