前端+nodejs+mysql实现前后端联通

ops/2025/2/26 18:46:15/

创建项目

  1. 目录结构

在这里插入图片描述

  1. 创建项目
    在这里插入图片描述

在这里插入图片描述

npm init

初始化项目
在这里插入图片描述
一路回车即可
当有 package.json这个文件的时候就相当于已经构建完毕
3. 配置package.json文件

{"name": "yes","version": "1.0.0","description": "","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1","start": "node index.js" // 设置启动文件},"author": "","license": "ISC","dependencies": {"mysql2": "^3.12.0" // 连接数据库的插件}
}
  1. 创建index.js到根目录上
    在这里插入图片描述

  2. 创建index.html文件和index.js平级

  3. 创建component功能性代码

代码块

粘贴上就能用这一套代码
index.js


// 数据库的方法
let mysqlFunction = require('./compents/heander')
// 启动服务器的方法
let serve = require('./compents/serve')
let obj = {}
obj['/select'] = mysqlFunction.select
obj['/add'] = mysqlFunction.add
obj['/del'] = mysqlFunction.delserve.creactServe(obj)

index.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<div class="abc"></div>
<form action="http://localhost:3002/add" method="post">名称<input type="text" name="name">年龄 <input type="number" name="age">性别  <select name="sex" id=""><option value=""></option><option value=""></option></select><button type="submit">新增</button>
</form>
<body><script>const abc= document.querySelector('.abc')abc.addEventListener('click',(e)=>{if (e.target.nodeName=='SPAN') {
console.log('点击了');      
var name = e.target.getAttribute('data-name');
console.log(name);
del(name)}})//  删除function del(params) {const url = 'http://localhost:3002/del?name='+params;fetch(url, {method: 'GET',}).then(response => {if (!response.ok) {throw new Error('Network response was not ok');}return response.json(); // Parse the JSON from the response}).then(data => {console.log(data);getdata()}).catch(error => console.error('Error:', error));}//  查询function getdata(params) {const url = 'http://localhost:3002/select?age=23';fetch(url, {method: 'GET',}).then(response => {if (!response.ok) {throw new Error('Network response was not ok');}return response.json(); // Parse the JSON from the response}).then(data => {let str = ``data.forEach(i=>{str+=`<div >${JSON.stringify(i)}<span data-name='${i.name}'>删除<span></div>`})abc.innerHTML= str}).catch(error => console.error('Error:', error));}getdata()</script>
</body></html>

heander.js

这里是设置功能性代码的地方并且链接数据库的地方

//  引入mysql方法
let http = require('http')
let mysql = require('mysql2')
let pool = mysql.createPool({user: 'root',host: 'localhost',password: '123456',port: 3306,//端口号database: 'mydemo' //连接的数据库, waitForConnections: true,// 当没有可用连接时是否等待connectionLimit: 10,     // 最大连接数量queueLimit: 0            // 最大等待请求数量 (0 表示不限制)
})
// 连接数据库
pool.getConnection((err) => {if (err) {console.log('连接失败');} else {console.log('连接成功');}
})
// res 路径 和post请求参数
// 查询
async function select (response, data) {console.log(data);try {response.writeHead('200', {"Content-Type": 'application/json'})const [reslut] = await pool.promise().query(`select * from school where age=${data.age}`)console.log(reslut);response.end(JSON.stringify(reslut))} catch (error) {console.log(error);response.writeHead('400', {"Content-Type": 'application/json'})response.end(JSON.stringify(error))}
}
// 新增
async function add (response, data) {console.log(data);try {response.writeHead('200', {"Content-Type": 'application/json'})let sql = 'insert into school values(?,?,?,?)'let values = [null, data.name, data.age, data.sex]const [reslut] = await pool.promise().query(sql, values)console.log(reslut);response.end(JSON.stringify(reslut))} catch (error) {console.log(error);response.writeHead('400', {"Content-Type": 'application/json'})response.end(JSON.stringify(error))return}
}
// 删除
async function del (response, data) {console.log(data);try {response.writeHead('200', {"Content-Type": 'application/json'})let sql = `delete from school where name='${data.name}'`const [reslut] = await pool.promise().query(sql)console.log(reslut);response.end(JSON.stringify(reslut))} catch (error) {console.log(error);response.writeHead('400', {"Content-Type": 'application/json'})response.end(JSON.stringify(error))return}
}
module.exports = {select,add,del
}

router.js

这个主要是对于路由做处理,来判断用户输入的接口地址是否正确

// let heander = require('./heander')
function route (response, url, data, params) {// console.log(url, data, params);// console.log(data[url]);if (typeof data[url] == 'function') {data[url](response, params)} else {response.writeHead('404', {"Content-Type": 'application/json'})response.end('{error:请输入正确路径}')}
}
module.exports = route

serve.js

服务器模块

let http = require('http')
let url = require('url')
let route = require('./router')
const querystring = require('querystring');
function creactServe (data) {const createserver = http.createServer(async (req, res) => {// // 设置 CORS 头部res.setHeader('Access-Control-Allow-Origin', 'http://127.0.0.1:5500');res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');// 判断get请求还是post请求console.log(req.method);if (req.method == 'GET') {route(res, url.parse(req.url, false).pathname, data, url.parse(req.url, true).query)// console.log(req.method);// console.log(url.parse(req.url, true).query);// res.end('{id:1}')} else {let data1 = []// 这里是post请求// 获取post参数// 出现错误的时候req.on('error', (err) => console.log(err))// 当有数据的时候req.on('data', (result) => data1.push(result))// 当数据传输完毕以后req.on('end', (result) => {data1 = querystring.parse(Buffer.concat(data1).toString())console.log(data1);route(res, url.parse(req.url, false).pathname, data, data1)// res.end(JSON.stringify(queryString.parse(data1)))})}// 有人请求了以后才会执行这里面的代码// req请求,res响应// 设置请求头// 返回json类型的格式})console.log('服务器启动成功');// 设置端口createserver.listen('3002', '127.0.0.1')
}module.exports = { creactServe }

如何使用

先启动服务,找到终端

npm run start
在这里插入图片描述
这个就是在package.json中配置的
在这里插入图片描述

然后再找到index.html文件
在这里插入图片描述
即可开始使用,目前目前功能,增删查询


http://www.ppmy.cn/ops/161469.html

相关文章

数据结构(陈越,何钦铭) 第四讲 树(中)

4.1 二叉搜索树 4.1.1 二叉搜索树及查找 Position Find(ElementTyoe X,BinTree BST){if(!BST){return NULL;}if(X>BST->Data){return Find(X,BST->Right)}else if(X<BST->Data){return Find(X,BST->Left)}else{return BST;} } Position IterFind(ElementTyp…

5G网络切片辨析(eMBB,mMTC,uRLLC)

URLLC有三大应用场景&#xff0c;分别是eMBB&#xff08;增强型移动宽带&#xff09;、uRLLC&#xff08;高可靠低延时通信&#xff09;和mMTC&#xff08;海量机器通信&#xff09;。 增强型移动宽带&#xff08;eMBB&#xff09;&#xff1a;需要关注峰值速率&#xff0c;容…

Docker 搭建 Nginx 服务器

系列文章目录 Docker 搭建 Nginx 服务器 系列文章目录前言一、准备工作二、设置 Nginx 容器的目录结构三、启动一个临时的 Nginx 容器来复制配置文件四、复制 Nginx 配置文件到本地目录五、删除临时 Nginx 容器六、创建并运行 Nginx 容器&#xff0c;挂载本地目录七、修改 ngin…

算法日常刷题笔记(1)

为保持刷题的习惯 计划一天刷3-5题 然后一周总计汇总一下 这是第一篇笔记 笔记时间为2月10日到2月17日 第一天 袋子里最少数目的球 袋子里最少数目的球https://leetcode.cn/problems/minimum-limit-of-balls-in-a-bag/ 给你一个整数数组 nums &#xff0c;其中 nums[i] 表示…

【无人集群系列---无人机集群编队算法】

【无人集群系列---无人机集群编队算法】 一、核心目标二、主流编队控制方法1. 领航-跟随法&#xff08;Leader-Follower&#xff09;2. 虚拟结构法&#xff08;Virtual Structure&#xff09;3. 行为法&#xff08;Behavior-Based&#xff09;4. 人工势场法&#xff08;Artific…

Docker小游戏 | 使用Docker部署star-battle太空飞船射击小游戏

Docker小游戏 | 使用Docker部署star-battle太空飞船射击小游戏 前言项目介绍项目简介项目预览二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署star-battle网页小游戏下载镜像创建容器检查容器状态检查服务端口安全设置四、访问star-battle网页小游戏五、总…

基于Spring自带的调度机制实现动态任务管理

一、需求背景 移动源需要将数据库中数据依据环保局的对接文档传递给对应省份环保局平台。传递的数据不同存在调度实时性不同&#xff0c;所以&#xff0c;需要一个调度池能够实现配置动态调度&#xff0c;且避免引入第三方调度工具减少维护成本。 二、实现思路 动态任务注册器…

【面试手撕】多线程/并发编程

文章目录 前言三个线程&#xff0c;交替打印A、B、C两个线程1~100交替输出奇数和偶数10个线程&#xff0c;每个线程1w&#xff0c;最终变量到达10w模拟死锁让三个线程怎么串行执行1.使用join方法2.使用CountDownLatch 前言 本文总结面试中常考的手撕多线程问题。 三个线程&am…