Node操作mysql

配置

  1. 安装mysql模块

    npm i mysql
    
  2. 建立连接

    const mysql = require('mysql');const db = mysql.createPool({host: '127.0.0.1',user: 'root',password: 'admin123',database: 'my_db_01'
    });
  3. 测试

    // select 1没有任何实质性作用 只是检查mysql模块是否正常
    db.query('select 1', (err, results) => {if (err) return console.log(err.message);console.log(results);
    });
    

操作数据库

  1. 查询数据

    // query函数第一项为查询的sql语句
    const sqlStr = 'select * from users';
    db.query(sqlStr, (err, results) => {if (err) console.log(err);// 如果执行的是select查询语句,则执行成功的结果是数组console.log(results);
    });
    
  2. 插入数据

    // 插入数据
    const user = {username: 'wl', password: '7777777'};
    // '?'问号为要填充的值的占位符
    const sqlStr = "insert into users (username, password) value  (?, ?)";
    // 如果执行的是insert插入语句,则执行成功的结果是对象
    db.query(sqlStr, [user.username, user.password], (err, results) => {if (err) console.log(err);if (results.affectedRows === 1) console.log('插入数据成功');
    });
    // ----------------------------------------------------------------------
    // 便捷插入数据方式
    const user = {username:'Bruce', password:'55520'};
    const sql = 'insert into users set ?';
    db.query(sql, user, (err, results) => {...
    });
    
  3. 更新数据

    const sql = 'update users set username=?, password=? where id=?';
    db.query(sql, [username, password, id], (err, results) => {...
    });// ----------------------------------------------------------------------
    const user = {id:7, username:'Bruce', password:'55520'};
    const sql = 'update users set ? where id=?';
    db.query(sql, [user, user.id], (err, results) => {...
    });
    
  4. 删除数据

    const sql = 'delete from users where id=?';
    db.query(sql, 7, (err, results) => {if (err) console.log(err);if (results.affectedRows === 1) console.log('删除数据成功');
    });
    

    使用 delete 语句会真正删除数据,保险起见,使用标记删除的形式,模拟删除的动作。即在表中设置状态字段,标记当前的数据是否被删除。

    // 利用status标记数据是否删除,1为删除
    db.query('update users set status=1 where id=?', 7, (err, results) => {...
    })
    

身份认证

session认证

服务端渲染推荐使用 Session 认证机制,不跨域的方式。

在这里插入图片描述

jwt认证

前后端分离推荐使用 JWT(JSON Web Token)认证机制,是目前最流行的跨域认证解决方案。
在这里插入图片描述

示例

const express = require('express');
const jwt = require('jsonwebtoken');
const { expressjwt: expressJWT } = require("express-jwt");
const bodyParser = require('body-parser');const app = express();// 密钥为任意字符串
const secretKey = 'Bruce ^_^';app.use(bodyParser.urlencoded({extended: false}));// 注册将JWT解析还原成json的中间件
// unless({ path: [/^\/api\//] }) 指定哪些接口无需访问权限
app.use(expressJWT({ secret: secretKey, algorithms: ['HS256']}).unless({ path: [/^\/api\//] }));app.post('/api/login', (req, res) => {const user = req.body;// 登录失败if (user.username !== 'admin' && user.password !== '000000') {return res.send({status: 400,message: '登录失败',});}// 登录成功// jwt.sign() 生成 JWT 字符串// 参数:用户信息对象、加密密钥、配置对象--token有效期// 尽量不保存敏感信息,因此只有用户名,没有密码const tokenStr = jwt.sign({username: user.username}, secretKey, {expiresIn: '1h'});res.send({status: 200,message: '登录成功',token: tokenStr,})
});// 获取用户信息
app.get('/admin/getinfo', (req, res) => {console.log(req.auth);res.send({status: 200,message: '获取信息成功',data: req.auth,});
});//  Express 的错误中间件,捕获这个错误并进行相关的处理
app.use((err, req, res, next) => {// 无效的tokenif (err.name === 'UnauthorizedError') {return res.send({ status: 401, message: 'Invalid token' });}// 其他错误res.send({ status: 500, message: 'Unknown error' });
});
// 启动服务器
app.listen(8888, () => {console.log('http://127.0.0.1')
});

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

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

相关文章

mac如何检测移动硬盘 mac硬盘检测工具 Tuxera怎么用 Tuxera NTFS官网

在工作学习中,我们都绕不开用移动硬盘来拷贝存储一些文件。但是在使用过程中,我们经常遇到“mac检测不到移动硬盘”“移动硬盘不存在”等问题,今天本文就带大家了解下mac如何检测移动硬盘,mac硬盘检测工具。 一、mac如何检测移动…

43.1k star, 免费开源的 markdown 编辑器 MarkText

43.1k star, 免费开源的 markdown 编辑器 MarkText 分类 开源分享 项目名: MarkText -- 简单而优雅的开源 Markdown 编辑器 Github 开源地址: https://github.com/marktext/marktext 官网地址: MarkText 支持平台: Linux, macOS 以及 Win…

网页的皮肤——CSS

1. CSS 介绍 CSS(Cascading Style Sheets)是一种样式表语言,用于描述 HTML 或 XML(包括如 SVG、XHTML 等)文档的外观和格式。CSS 允许开发者将文档的内容与其表现分离,使得网页设计更加灵活和可维护。CSS …

Python作业

第一题:打印菱形(实心) 第二题:打印菱形(空芯) 第三题:打印菱形(间隔为2) 第四题:猜数字 第五题:最大公约数 第六题:判断素数 第七题&…

Redis的高可用和持久化

目录 一、Redis高可用 二、Redis持久化 2.1 持久化的功能 2.2 Redis提供两种方式进行持久化 三、RDB持久化 3.1 触发条件 3.1.1 手动触发 3.1.2 自动触发 3.1.3 其他自动触发机制 四、AOF持久化 4.1 开启AOF 4.2 执行流程 4.2.1 命令追加 (append) 4.2.2 文件写入…

深入理解数据结构第三弹——二叉树(3)——二叉树的基本结构与操作

二叉树(1):深入理解数据结构第一弹——二叉树(1)——堆-CSDN博客 二叉树(2):深入理解数据结构第二弹——二叉树(2)——堆排序及其时间复杂度-CSDN博客 前言…

如何通过ArkTS卡片的Canvas自定义绘制能力实现五子棋游戏卡片

介绍 本示例展示了如何通过ArkTS卡片的Canvas自定义绘制能力实现一个简单的五子棋游戏卡片。 使用Canvas绘制棋盘和黑白棋子的落子。通过卡片支持的点击事件进行交互,让用户在棋盘上进行黑白棋子的对局。通过TS的逻辑代码实现五子棋输赢判定、回退等逻辑计算&…

多线程学习-线程安全

目录 1.多线程可能会造成的安全问题 2. static共享变量 3.同步代码块 4.同步方法 5.使用Lock手动加锁和解锁 6.死锁 1.多线程可能会造成的安全问题 场景:三个窗口同时售卖100张电影票,使用线程模拟。 public class MyThread extends Thread{//tic…

时序分解 | Matlab实现GSWOA-VMD改进鲸鱼优化算法优化变分模态分解时间序列信号分解

时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解 目录 时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现GSWOA-VMD改进鲸鱼优化算法优化变分模态分解时间序…

GitHub入门与实践

ISBN: 978-7-115-39409-5 作者:【日】大塚弘记 译者:支鹏浩、刘斌 页数:255页 阅读时间:2023-08-05 推荐指数:★★★★★ 好久之前读完的了,一直没有写笔记。 这本入门Git的书籍还是非常推荐的,…

前端实现token的无感刷新#记录

因为服务器的token一版不会设置太长,token过期后就需要重新登录,频繁的登录会造成体验不好的问题,因此,需要体验好的话,就需要定时去刷新token,并替换之前的token。以下是token失效的效果: 那么…

Vue3组件基础示例

组件是vue中最推崇的,也是最强大的功能之一,就是为了提高重用性,减少重复性的开发。 如何使用原生HTML方法实现组件化 在使用原生HTML开发时,我们也会遇到一些常见的功能、模块,那么如何在原生HTML中使用组件化呢&am…

动态规划——线性dp

图片来源&#xff1a;_snowstorm_ 路线问题的状态表示一般都可以用点的坐标来表示 状态表示数组维数的确定原则&#xff1a;在可以用该维数表示出答案的基础上维数尽可能最小 数字三角形 acwing 898 #include<iostream> #include<cstring> #include<algorith…

python学习笔记——控制流

目录 1. 控制流**** 1.1. if-elif-else语句**** 1.2. 循环结构**** 1.2.1. for循环**** 1.2.2. While循环**** 1.2.3. 嵌套循环**** 1.2.4. 循环的控制**** 1.2.4.1. Break**** 1.2.4.2. Continue**** 1.2.5. 遍历**** 1.2.5.1. dict**** 1.2.5.1.1. 遍历key&#x…

三分钟带你了解,可重构柔性装配生产线

产品个性化时代&#xff0c;产品小批量、多批次&#xff0c;行业常用高柔性的人-机混合装配线实现跨品类产品装配&#xff0c;但产品的装配质量一致性差、效率低成为行业痛点。富唯智能联合清华大学提出了可重构柔性装配方法和技术&#xff0c;实现跨品类产品的数控自动化装配。…

京东云轻量云主机8核16G配置租用价格1198元1年、4688元三年

京东云轻量云主机8核16G服务器租用优惠价格1198元1年、4688元三年&#xff0c;配置为8C16G-270G SSD系统盘-5M带宽-500G月流量&#xff0c;华北-北京地域。京东云8核16G服务器活动页面 yunfuwuqiba.com/go/jd 活动链接打开如下图&#xff1a; 京东云8核16G服务器优惠价格 京东云…

原型变量、原子操作、原子性、内存序

一、原子变量、原子操作 锁竞争&#xff1a;互斥锁、条件变量、原子变量、信号量、读写锁、自旋锁。在高性能基础组件优化的时候&#xff0c;为了进一步提高并发性能&#xff0c;可以使用原子变量。性能&#xff1a;原子变量 > 自旋锁 > 互斥锁。 操作临界资源的时间较长…

7 个 iMessage 恢复应用程序/软件可轻松恢复文本

由于误操作、iOS 升级中断、越狱失败、设备损坏等原因&#xff0c;您可能会丢失 iPhone/iPad 上的 iMessages。意外删除很大程度上增加了这种可能性。更糟糕的是&#xff0c;这种情况经常发生在 iDevice 缺乏备份的情况下。 &#xff08;iPhone消息消失还占用空间&#xff1f;&…

如何利用HubSpot 出海CRM实现精准海外客户定位与拓展?

在当今全球化的商业环境中&#xff0c;企业寻求海外市场的拓展已成为增长的重要策略。然而&#xff0c;海外市场的复杂性和多样性为企业带来了巨大的挑战。为了有效地定位和拓展海外客户&#xff0c;许多企业选择了HubSpot 出海CRM作为他们的营销和销售管理工具。今天运营坛将带…

Web题记

反序列化补充知识&#xff1a; private变量会被序列化为&#xff1a;\x00类名\x00变量名 protected变量会被序列化为: \x00\*\x00变量名 public变量会被序列化为&#xff1a;变量名web254 这个逻辑不难&#xff0c;自己刚看的时候还奇怪是不是自己哪里想错了&#xff0c;因为…