Node.JS后端开发笔记整理(简洁版)

前端

1. 开发环境和技术栈

  • 开发工具:Visual Studio Code
  • Node.js版本:18.19.0(建议保持在18+)
  • 包管理器:npm
  • 前端框架:Vue3.4
  • 脚本语言:TypeScript
  • 构建工具:Vite
  • 后端框架:Express(基于 Node.js 平台,快速、开放、极简的 Web 开发框架)
  • 数据访问:MySQL

2. 表设计分析

在这里插入图片描述

3. 建库建表

在这里插入图片描述

4. 使用 Vite 构建 Vue3+TS项目

npm create vite zhaoxi_book_web

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. 目录结构

在这里插入图片描述

6. 修改 Vite 配置文件

  1. 设置项目启动后默认打开浏览器
  2. 设置IP
  3. 设置端口

```go
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'// https://vitejs.dev/config/
export default defineConfig({plugins: [vue()],server: {// 启动后打开浏览器open: true,// 主机host: '127.0.0.1',// 端口port:3001}
})

在这里插入图片描述

7. Element Plus 介绍

基于 Vue3,面向设计师和开发者的组件库

7.1 安装

npm install element-plus

7.2 导入

  • main.ts 文件
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import './style.css'
import App from './App.vue'const app = createApp(App)
app.use(ElementPlus)
app.mount('#app')

接下来就可以使用 Element 组件了

后端 + 数据库

1. Node.js 项目初始化

npm init

在这里插入图片描述

2. Express 介绍和安装

npm install express

在这里插入图片描述
拓展:为了解决Express中的异步问题,后来又出现了 下一代web框架koa

npm install koa@2.0.0
// 导入koa,和koa 1.x不同,在koa2中,我们导入的是一个class,因此用大写的Koa表示:
const Koa = require('koa');// 创建一个Koa对象表示web app本身:
const app = new Koa();// 对于任何请求,app将调用该异步函数处理请求:
app.use(async (ctx, next) => {await next();ctx.response.type = 'text/html';ctx.response.body = '<h1>Hello, koa2!</h1>';
});// 在端口3000监听:
app.listen(3000);
console.log('app started at port 3000...');

还可以直接用命令node app.js在命令行启动程序,或者用npm start启动。npm start命令会让npm执行定义在package.json文件中的start对应命令:

"scripts": {"start": "node app.js"
}

3. 配置以及启动 http 服务

  • 新建 app.js 文件
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {res.send('Hello World!')
})
app.listen(port, () => {console.log(`Example app liistening on port ${port}`);
})
  • 启动:命令行窗口中输入 node app.js 即可启动
  • 地址栏输入 localhost:3000,页面如下
    在这里插入图片描述

4. 安装和访问 MySQL

4.1 安装

npm install mysql

4.2 配置读取文件

  • 新建config.js文件
const configs = {mysql: {host: 'localhost',user: 'dbuser',password: 'password',database:'my_db'}
}
module.exports = configs

4.3 访问 MySQL

  • app.js 文件中进行访问 MySQL
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {res.send('Hello World!')
})// 导入配置信息
const configs = require('./config')
var mysql = require('mysql')
var connection = mysql.createConnection(configs.mysql)
// 打开连接
connection.connect()
// 执行SQL
connection.query('SELECT 1 + 1 AS solution', function (ree, rows, fields) {if (err) throw errconsole.log('The solution is:',rows[0].solution)
})
// 关闭连接
connection.end()app.listen(port, () => {console.log(`Example app liistening on port ${port}`);
})

5. 接口实现

// 做参数解析用
npm install body-parser
  • app.js 文件中
const express = require('express')
var bodyParser = require('body-parser')
const app = express()
// 解析应用程序 /x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// 解析 application/json
app.use(bodyParser.json())
const port = 3000
app.get('/', (req, res) => {res.send('Hello World!')
})// 导入配置信息
const configs = require('./config')
var mysql = require('mysql')
var connection = mysql.createConnection(configs.mysql)
// get 请求,返回json格式list数据
app.get('/get', (req, res) => {let sql = `SELECT * FROM Book`;if (req.query.BookName) {sql = `SELECT * FROM BooK WHERE BookName LIKE '%${req.query.BookName}%'`}connection.query(sql, (err, rows) => {if (!err) {res.send(rows)} else {res.send(err)}})
})
// add
app.post('/add', (req, res) => {let sql = `INSERT INFO BooK(BookName,Author,TypeName,Remarks)Values('${req.body.BookName}','${req.body.Author}','${req.body.TypeName}','${req.body.Remarks}')`;connection.query(sql, (err, rows) => {if (!err) {res.send('操作成功!')} else {res.send(err)}})
})
// edit
app.post('/edit', (req, res) => {let sql = `UPDATE BooK SETBookName = '${req.body.BookName}',Author = '${req.body.Author}',TypeName = '${req.body.TypeName}',Remarks = '${req.body.Remarks}';`;connection.query(sql, (err, rows) => {if (!err) {res.send('操作成功!')} else {res.send(err)}})
})
// delete
app.get('/delete', (req, res) => {let sql = `DELETE FROM BooK WHERE ID=${req.query.Id};`connection.query(sql, (err, rows) => {if (!err) {res.send('操作成功')} else {res.send(err)}})
})
app.listen(port, () => {console.log(`Example app liistening on port ${port}`);
})

前后端联调

针对以上接口我们要在前端进行调用

npm install axios
const get = (BookName: string) => {return axios.get(`/api/get?BookName=${BookName}`)
}
const add = (req: {}) => {return axios.post('/api/add',req)
}
const edit = (req: {}) => {return axios.post('/api/edit',req)
}
const delete = (id: string) => {return axios.get(`/api/delete?Id=${id}`)
}

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

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

相关文章

ubuntu设置扩充swap交换空间

Swap是指Linux系统中的交换分区,类似于Windows的虚拟内存,当内存不足的时候,把一部分硬盘空间虚拟成内存来使用,从而解决内存不足的问题。交换分区,它的功能就是在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行! …

Golang基础-13

Go语言基础 介绍 并发 channel goroutine 互斥锁 读写锁 原子操作 select 超时处理 sync包 runtime包 介绍 本文介绍Go语言中 channel、goroutine、互斥锁、读写锁、原子操作、select、超时处理、sync包、runtime包等相关知识。 并发 进程是是最小的资源管理单元…

异步FIFO约束set_max_delay

1.最大延迟set_max_delay set_max_delay [-datapath_only] -from [ node_list] -to [node_list] delay_value 在Set Max Delay约束中使用-datapath_only选项时&#xff0c;它指示综合工具在优化设计时仅考虑数据通路的延迟&#xff0c;而不考虑控制逻辑的延迟。 关于最大最小…

L1正则化的数学公式

L1正则化是机器学习和统计学中常用的正则化技术&#xff0c;用于控制模型的复杂度并防止过拟合。它们的数学表达如下&#xff1a; L1正则化&#xff08;也称为Lasso正则化&#xff09;&#xff1a;在损失函数中添加模型参数的绝对值之和作为正则化项。其数学公式如下所示&…

利用地图资源工具让Sentinel-2自动生成NDVI\EVI

新版地图资源工具已经能自动计算EVI了&#xff0c;也就是现在工具可以自动计算NDVI、EVI及做哨兵L1C数据的自动预处理&#xff01;只要勾选如下选项后数据下载的同时会自动生成NDVI、EVI&#xff01; 归一化差异植被指数 (NDVI) 由于植被在近红外波段处有较强的反射&#…

Training - PyTorch Lightning 的 Horovod 策略实践 (all_gather)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/137686312 在 PyTorch Lightning 中使用 Horovod 策略&#xff0c;可以在多个 GPU 上并行训练模型。Horovod 是分布式训练框架&#xff…

Oladance、南卡、漫步者开放式耳机好不好用?3大当红明星产品测评PK

​在音频市场中&#xff0c;开放式耳机以其创新设计和卓越听感赢得了一定的关注。然而&#xff0c;也存在一些产品质量和音质不尽人意&#xff0c;甚至可能影响用户听力安全。作为一名专业的音频设备评测师&#xff0c;我建议用户在选择开放式耳机时&#xff0c;应优先选择那些…

《R语言与农业数据统计分析及建模》学习——控制流

1、控制流的概念和作用 控制流是指根据循环或条件来控制程序的执行顺序和逻辑。 2、循环语句 循环语句允许程序重复执行特定的代码块&#xff0c;知道满足特定条件。 在R语言中&#xff0c;常见的循环语句有for、while和repeat。 # for循环用于在已知次数的情况下重复执行代码…

磁盘的管理

会在linux中使用硬盘 分区 格式化&#xff08;重新安装文件系统&#xff09; 挂载 硬盘的分类 1.机械硬盘 2.固态硬盘 硬盘的数据结构 扇区&#xff1a;盘片被分为多个扇形区域&#xff0c;每个扇区存放512字节的 数据 &#xff08;扇区越多容量越大&#xff09; 存放数据的…

2024.4.13 Python 爬虫复习day01

目录 day01_HTTP协议HTML页面web服务器 各类名词解释 URL统一资源定位符 HTTP协议 HTML页面 知识点: 第一个页面 标题标签和图片标签 注册页面 登录页面 WEB服务器 安装fastapi和uvicorn 原始命令方式 镜像源命令方式 工具方式 快速搭建web服务器 知识点: 示例…

openGauss学习笔记-266 openGauss性能调优-TPCC性能调优测试指导-文件系统配置

文章目录 openGauss学习笔记-266 openGauss性能调优-TPCC性能调优测试指导-文件系统配置266.1 查看当前数据盘的文件系统类型266.2 对于需要修改的磁盘&#xff0c;备份所需的数据至其他磁盘或其他服务器266.3 格式化磁盘为xfs文件系统266.4 执行**步骤一** openGauss学习笔记-…

《Kubernetes部署篇:基于Kylin V10+ARM架构CPU+外部etcd使用containerd部署K8S 1.26.15容器版集群(多主多从)》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;企业级K8s集群运维实战 1、在当前实验环境中安装K8S1.25.14版本&#xff0c;出现了一个问题&#xff0c;就是在pod中访问百度网站&#xff0c;大…

Mysql嵌套查询太简单了

1、子查询的分类 不相关查询&#xff1a; 子查询能独立执行 相关查询&#xff1a; 子查询不能独立运行 相关查询的执行顺序&#xff1a; 首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询, 若WHERE子句返回值为真&#xff0c;则取此元组放入结果…

maven3.9+下载安装

maven介绍 Maven 是一个项目管理和理解工具&#xff0c;它基于项目对象模型&#xff08;POM&#xff09;概念。Maven 可以帮助开发者定义项目结构、依赖关系、构建过程以及其他任务。它主要用于 Java 项目&#xff0c;但也可以用于其他类型的项目。Maven 的主要目标是简化构建…

Centos7 ElasticSearch集群搭建

1. 服务器环境配置 1.1 配置hosts文件 3台服务器都要执行 vim /etc/hosts; # 将以下内容写入3台服务器hosts文件 192.168.226.148 es001 192.168.226.149 es002 192.168.226.150 es003 1.2 关闭防火墙 3台服务器都要执行 systemctl stop firewalld; systemctl disable…

OpenCV从入门到精通实战(四)——答题卡识别判卷系统

基于OpenCV的答题卡识别系统&#xff0c;其主要功能是自动读取并评分答题卡上的选择题答案。系统通过图像处理和计算机视觉技术&#xff0c;自动化地完成了从读取图像到输出成绩的整个流程。下面是该系统的主要步骤和实现细节的概述&#xff1a; 1. 导入必要的库 系统首先导入…

偏微分方程算法之一阶双曲差分法

目录 一、研究目标 二、理论推导 2.1 引言 2.2 迎风格式 2.3 完全不稳定差分格式 2.4 蛙跳格式&#xff08;Leapfrog&#xff09; 2.5 Lax-Friedrichs格式 2.6 Lax-Wendroff格式 2.7 Beam-Warming格式 2.8 隐格式 2.9 Courant-Friedrichs-Lewy条件&#xff08;CFL条…

(51单片机)第十一章-串行口应用提高

11.1 方式0应用 在第6章中&#xff0c;已经对51单片机的串行口结构做过详细介绍&#xff0c;并且通过实例讲解了串行口的4种工作方式中方式1的具体用法&#xff0c;本节详细讲述串行口方式0的用法。 串行口方式0被称为同步移位寄存器的输入/输出方式&#xff0c;主要用于扩展并…

【结构型模式】外观模式

​一、外观模式概述 外观模式定义与意图&#xff1a;外观类为复杂的子系统提供了一个统一的入口。外观模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用。&#xff08;对象结构型模式&#xff09; 外观模式的特点&#xff1a; 1.又叫做门面模式&#xf…

试驾小米SU7后,我准备退了我的订单

文 | AUTO芯球 作者 | 雷歌 我真想退了我之前大定的小米SU7Pro版&#xff01; 前两天我不是和朋友三人一起开着问界M9去试驾SU7了嘛&#xff0c; 说实话&#xff0c;这一圈下来&#xff0c;有欣喜有失望。 SU7的优点特别明显&#xff0c;也很突出&#xff0c; 就是它的底…