当前位置: 首页 > news >正文

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

相关文章:

  • Java 代理模式
  • C语言---------深入理解指针
  • react:handleEdit={() => handleEdit(user)} 和 handleEdit={handleEdit(user)}有啥区别
  • MFC socket编程-服务端和客户端流程
  • Vue43-单文件组件
  • 22.1 正则表达式-定义正则表达式、正则语法
  • k8s学习--Traffic Shifting 流量接入
  • 【归并排序】| 详解归并排序核心代码之合并两个有序数组 力扣88
  • ubuntu18.04 配置 mid360并测试fast_lio
  • C++ 算法教程
  • 深入理解指针(四)
  • 计算机图形学入门11:图形管线与着色器
  • fs模块(一)
  • Day07-06_13【CT】LeetCode手撕—1. 两数之和
  • Vue主要使用-03
  • @jsonView过滤属性
  • __proto__ 和 prototype的关系
  • 【React系列】如何构建React应用程序
  • 2017 年终总结 —— 在路上
  • 30天自制操作系统-2
  • co模块的前端实现
  • Elasticsearch 参考指南(升级前重新索引)
  • ES6之路之模块详解
  • Linux中的硬链接与软链接
  • Mithril.js 入门介绍
  • MySQL主从复制读写分离及奇怪的问题
  • Node + FFmpeg 实现Canvas动画导出视频
  • orm2 中文文档 3.1 模型属性
  • React-Native - 收藏集 - 掘金
  • SpringCloud集成分布式事务LCN (一)
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • Tornado学习笔记(1)
  • vue自定义指令实现v-tap插件
  • 从重复到重用
  • 回顾2016
  • 离散点最小(凸)包围边界查找
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (1)(1.9) MSP (version 4.2)
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (Ruby)Ubuntu12.04安装Rails环境
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (独孤九剑)--文件系统
  • (力扣题库)跳跃游戏II(c++)
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (论文阅读30/100)Convolutional Pose Machines
  • (三)mysql_MYSQL(三)
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (正则)提取页面里的img标签
  • (转)大型网站的系统架构
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据