express.js--连接数据库,并且增删改查(四)

使用数据库需要在电脑安装mysql,然后使用navicat

我没有下载mysql,我使用的是小皮里面的数据库,需要破解版的navicat可以私信我

安装mysql

npm i mysql

数据库的基本信息,我是直接写到配置文件里面的

config/index.js

module.exports = {app: {port: process.PORT || 3000,//jwt密钥jwtSecret: 'jwtSecret',//token过期时间expiresIn: 60 * 60 * 24,},db: {host: 'localhost', // 主机port: '3306', //端⼝,mysql默认端⼝就是3306user: 'root', // ⽤户名password: 'root', // 密码database: 'test1', // 数据库}
}

数据库连接查询

db/index.js

const { db } = require('../config')
const mysql = require('mysql');// 连接mysql
function connect() {return mysql.createConnection(db)
}
// 新建查询连接
function querySql(sql) {const conn = connect();return new Promise((resolve, reject) => {try {conn.query(sql, (err, res) => {if (err) {reject(err);} else {resolve(res);}})} catch (e) {reject(e);} finally {// 释放连接conn.end();}})
}
module.exports = querySql

controller/User.js

const jwt = require('jsonwebtoken')
const { app } = require('../config')
const db = require('../db');
const { decodeToken } = require("../middleware");
/* 生成token */
const generateToken = (data) => {const created = Math.floor(Date.now() / 1000);const token = jwt.sign(data, app.jwtSecret, {expiresIn: app.expiresIn,});return token;
}/* 用户注册 */
const register = async (req, res, next) => {try {console.log(req.body);const { username, password } = req.body;if (!username || !password) {return res.status(200).json({code: 400,data: [],msg: "用户名或密码不能为空"});}//查询 user 表,根据username是否相同,判断用户是否存在const sql = `select * from user where username='${username}'`;const result = await db(sql);if (result.length) {return res.status(200).json({code: 400,data: [],msg: "用户已存在"});} else {//插入数据const insertSql = `insert into user (username,password) values ('${username}','${password}')`;await db(insertSql);const userId = await db(`select id from user where username='${username}'`);//把userId传入生成token的函数中return res.status(200).json({code: 200,data: {token: generateToken({ userId: userId[0].id }),},msg: "注册成功"})}} catch (error) {next(error);}
}/* 修改用户信息 */
const updateUser = async (req, res, next) => {try {let { userId } = decodeToken(req.headers.authorization)let { username } = req.body;if (!username || !userId) {return res.status(200).json({code: 400,data: [],msg: "操作失败"});}const sql = `update user set username='${username}' where id=${userId}`;await db(sql);return res.status(200).json({code: 200,data: [],msg: "修改成功"});} catch (error) {next(error);}
}
module.exports = {register,updateUser
}

routes/user.js

const router = require("express").Router()
const { register, updateUser } = require("../controller/User")
const { checkToken, decodeToken } = require("../middleware")
//注册
router.post("/register", register)
//修改个人信息
router.post("/update", checkToken, updateUser)
module.exports = router

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

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

相关文章

【Android】联系人列表补充

真布局--叠起来垂直管 效果展示 部分代码&#xff08;在activity_main&#xff09;里面 <FrameLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"…

如何在Windows下使用Docker Desktop运行CentOS容器

引言&#xff1a; 在Windows操作系统中&#xff0c;我们可以使用Docker Desktop来轻松运行和管理各种Linux容器&#xff0c;包括CentOS。今天&#xff0c;我们就来详细讲解一下如何在Windows环境下使用Docker Desktop来运行CentOS容器。 一、安装Docker Desktop 首先&#x…

WPF中CommandParameter用法

1. 界面样式 2. XAML中代码部分 <ButtonGrid.Row"0"Grid.Column"1"Command"{Binding BtnClick_Number}"CommandParameter"7"Content"7"Style"{StaticResource BtnStyle_Num}" /> <ButtonGrid.Row"…

【个人商业画布】你有思考过把自己当成一家公司来经营吗?

商业模式画布(Business Model Canvas)&#xff0c;是亚历山大奥斯特瓦德在《商业模式新生代》中提出的一种用于描述商业模式、可视化商业模式、评估商业模式以及改变商业模式的通用语言。它由9个模块构成&#xff0c;帮助创业者理清为“细分客户提供独有价值”&#xff0c;从而…

浅谈OpenHarmony LiteOS-A内核之基础硬件——中断控制器GIC400

一、前言 OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;采用多内核架构&#xff0c;支持Linux内核的标准系统、LiteOS-A的小型系统、LiteOS-M的轻量系统。 其中LiteOS-A要求设备具备一定的处理能力&#xff0c;对比LiteOS-M&#xff0c;LiteOS-A支持…

国赛部分复现

MISC 神秘文件 下载解压后是个pptm文件&#xff0c;内容丰富 使用010打开ppt查看 发现为PK开头&#xff0c;属于压缩包文件。复制粘贴ppt&#xff0c;修改副本后缀为.zip并解压 part1 查看属性&#xff0c;发现奇怪字符 QFCfpPQ6ZymuM3gq 根据提示Bifid chipher&#xff0c;…

【Linux】Linux信号产生,接受与处理机制

理解Linux信号产生&#xff0c;接受与处理机制 信号是Linux操作系统中一种用于进程间通信和异步事件处理的机制。在本文中&#xff0c;我们将结合Linux的源码&#xff0c;深入分析信号的产生、发送、接收和处理的底层原理。 文章目录 理解Linux信号产生&#xff0c;接受与处理…

Android 几个简单的自定义对话框介绍

Android 几个简单的自定义对话框介绍 文章目录 一、前言二、对话框相关内容1、效果2、对话框显示的调用代码&#xff08;1&#xff09;原生对话框代码&#xff1a;&#xff08;2&#xff09;自定义对话框代码&#xff1a; 3、对话框SweetAlertDialog 主要实现代码&#xff1a;4…

【Linux】-Elasticsearch安装部署[16]

目录 简介 安装 1、添加yum仓库 2、安装es 3、配置es 4、启动es 5、关闭防火墙 6、测试 简介 全文搜索属于最常见的要求&#xff0c;开源的Elasticsearch&#xff08;以下简称es&#xff09;是目前全文搜索引擎的首选。它可以快速的储存、搜索和分析海量数据。维基百科…

以人为本的人工智能:李飞飞谈AI

随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;关于AI的讨论越来越多&#xff0c;特别是围绕其可能带来的威胁。有人担心高效的AI会夺走我们的工作&#xff0c;甚至不可控的AI最终会统治人类。对此&#xff0c;斯坦福大学计算机科学系教授李飞飞提出了不同…

Paddle 稀疏计算 使用指南

Paddle 稀疏计算 使用指南 1. 稀疏格式介绍 1.1 稀疏格式介绍 稀疏矩阵是一种特殊的矩阵&#xff0c;其中绝大多数元素为0。与密集矩阵相比&#xff0c;稀疏矩阵可以节省大量存储空间&#xff0c;并提高计算效率。 例如&#xff0c;一个5x5的矩阵中只有3个非零元素: impor…

springboot中使用spring-cloud-starter-openfeign遇到的问题及解决参考

声明&#xff1a;本文使用的spring boot 版本是2.7.12 在springboot中使用spring-cloud-starter-openfeign遇到的一些问题&#xff1a; Caused by: java.lang.ClassNotFoundException: org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata java.…

微软文字转语音小工具(Text to speech)网页版

在线文字转语音工具&#xff1a;在线文本转语音 (text-to-speech.cn) 随着科技的迅猛发展&#xff0c;人工智能技术日益成熟&#xff0c;AI配音作为其中的一项重要应用&#xff0c;正在以惊人的速度改变着我们的生活。所谓AI配音&#xff0c;指的是利用人工智能技术模拟人类声音…

使用字节豆包大模型在 Dify 上实现最简单的 Agent 应用(四):AI 信息检索

这篇文章&#xff0c;我们继续聊聊&#xff0c;如何折腾 AI 应用&#xff0c;把不 AI 的东西&#xff0c;“AI 起来”。在不折腾复杂的系统和环境的前提下&#xff0c;快速完成轻量的 Agent 应用。 写在前面 在上一篇文章《使用 Dify、Meilisearch、零一万物模型实现最简单的…

PDF Reader Pro for Mac 直装激活版:专业PDF阅读编辑软件

在数字化时代&#xff0c;PDF文件已成为我们日常工作和学习中不可或缺的一部分。然而&#xff0c;如何高效、便捷地阅读、编辑和管理这些PDF文件&#xff0c;却一直是许多人面临的难题。现在&#xff0c;有了PDF Reader Pro for Mac&#xff0c;这些难题将迎刃而解。 PDF Reade…

GPIO模拟IIC通信测量环境光

目录 iic.h iic.c ap3216c.h ap3216.c main.c 实验效果 iic.h #ifndef __IIC_H__ #define __IIC_H__#include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h" //SDA 数据线为PF15 //SCL 时钟线为PF14//配置PF15为输出模式 #define SET_SDA_OUT d…

列举几个淘宝商品详情API接口测试示例

API名&#xff1a;item_get 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_search_shop等]cacheString否[yes…

网络模型-Qinq配置与应用

Qinq配置与应用 通过配置Qinq来实现利用公网提供的VLAN100使企业1互通&#xff0c;利用公网提供的VLAN200使企业2互通不同企业之间互相隔离。并通过在连接其它厂商设备的接口上配置修改0in0外层VLAN Tag的TPID值&#xff0c;来实现与其它厂商设备的互通。 一、创建VLAN #在Swi…

等风来不如追风去 火星皮卡与罗乐的逐梦之旅

都说&#xff0c;男人至死皆少年。少年有梦&#xff0c;不应止于心动。于是&#xff0c;家在毕节的罗乐在节前果断为自己购入了一辆全尺寸火星皮卡当作自己的新年礼物。从此火星皮卡便与罗乐相伴义无反顾地踏上这场热辣滚烫的逐梦之旅 “全尺寸火星满足了我对Dream Car的所有幻…

DVWA代码审计--文件上传

NO.1 Low 首先来看下代码 <?php if( isset( $_POST[ Upload ] ) ) { // Where are we going to be writing to? $target_path DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/"; $target_path . basename( $_FILES[ uploaded ][ name ] ); // Can we move the f…