Nodejs模块的封装(数据库Mysql)

news2024/11/16 10:46:31

文章目录

    • 项目结构
      • 本次演示需要使用的第三方包为
      • 1.app.js相关配置
      • 2.router下的user.js相关配置
      • 3.db/index.js文件相关操作
      • 4.router_handler下的user.js相关操作

项目结构

在这里插入图片描述
后面的项目相关文件的创建步骤按照我写的博客从上往下一步一步来

本次演示需要使用的第三方包为

    "cors": "^2.8.5",
    "express": "^4.17.1",
    "mysql": "^2.18.1"

下载命令为:
	npm i express@4.17.1
	npm i cors@2.8.5
	npm i mysql@2.18.1

第一步需要进行初始化

npm init -y

1.app.js相关配置

主要逻辑还是通过路由模块进行处理,通过导入和全局注册路由模块,代码如下:

//导入express服务器第三方的包
const express = require("express")
//解决跨域,导入中间件cors
const cors = require("cors")
//导入路由模块
const userrouter = require("./router/user.js")
//创建服务器实例
const app=express()
//注册跨域中间件
app.use(cors())
//用来解析post请求体中的参数,把post请求的参数解析res.body
app.use(express.urlencoded({extended:false}))
//全局注册router
app.use("/api",userrouter)

//调用listen启动服务器
app.listen(80, function () {
    console.log("开启了127.0.0.1服务器");
})

2.router下的user.js相关配置

router下的user.js为用户模块的增删改查操作,但这里只提供接口,具体用户的业务操作在router_handler下的user.js
router下的user.js的代码如下:

//导入express服务器第三方的包
const express = require("express")
//使用路由模块
const router = express.Router()

//导入路由处理函数模块
const userhandler = require("../router_handler/user.js")

//注册新用户(以下的regUser,login为router_handler下的user.js向外暴露出的方法,只要导入router_handler下的user.js就能使用它里面的暴露的方法)
router.post('/reguser',userhandler.regUser)
//登录
router.post('/login',userhandler.login)

//将当前路由模块向外导出
module.exports = router

3.db/index.js文件相关操作

在根目录下创建db文件夹,在db文件夹下创建index.js模块,这个模块用于连接数据库,代码如下:

//导入MySQL模块
const mysql=require("mysql")
//建立与MySQL数据库的连接
const db=mysql.createPool({
    host:"127.0.0.1", //数据库的IP地址
    user:"root",  //登录数据库的账号
    password:"admin",  //登录数据库的密码
    database:"xiaoji"  //指定要操作哪个数据库
})

//将连接好的数据库对象向外导出,供外界使用
module.exports = db

4.router_handler下的user.js相关操作

这一个文件主要就是对传来的数据进行处理的,包括操作数据库等业务逻辑

//导入数据库模块
const db =  require("../db/index.js")


//注册用户的处理函数
exports.regUser = (req,res) => {
    const userinfo = req.body;
    //对表单的数据进行合法的校验(判断用户名或密码是否为空)
    if(!userinfo.username || !userinfo.password){
        return res.send({status:1,message:'用户名或密码不合法'})
    }

    //对数据库操作
    //定义sql
    const sql = 'select * from ev_users'
    db.query(sql,function(err,result){
        //查询失败返回数据
        if(err) return console.log("查询失败");
        //查询数据库成功将数据返回至前端使用
        return res.send({status:1,message:"查询成功",data:result})
    })
}


//用户登录的处理函数
exports.login = (req,res) =>{
    res.send("ok2")
}

以上配置完就结束了,以下是接口响应效果:
在这里插入图片描述
注意:在项目中可能会多次调用res.send,因此可以封装个方法,不需要每次那么麻烦了
下面代码添加到根目录app.js里面所有的导入路由模块之前

//封装res.cc函数
app.use((req,res,next) => {
    res.cc=function(err,status = 1){
        res.send({
            status,
            message:err instanceof Error ? err.message:err,
        })
    }
    next()
})

必须放到所有路由导入之前,不然没效果
也可以直接下载resccjwz注册使用

npm i resccjwz

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

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

相关文章

【操作系统实验/Golang】实验4:虚拟内存页面置换算法

目录 1 实验问题描述 2 测试数据 3 流程图 4 实验结果 4 实验代码 1 实验问题描述 设计程序模拟先进先出FIFO,最佳置换OPT和最近最久未使用LRU页面置换算法的工作过程。 假设内存中分配给每个进程的最小物理块数为m,在进程运行过程中要访问的页面个…

【Leetcode面试常见题目题解】1. 两数相加

题目描述 本文是leetcode第2题的题解,题目描述摘自leetcode。如下 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个…

海外服务器提供商选择中存在哪些风险?

开展海外业务时,毫无疑问,选择一个高质量的海外服务器提供商可以省去不少麻烦。但是,同时有一些海外服务商需要避开。毕竟一个服务器不靠谱,这跟提供商有很大的原因。下面主要是关于低于标准的海外服务器提供商的一些潜在风险。 1…

ES6中字符串和数组新增的方法

ES6中字符串和数组新增的方法一、字符串中新增的方法1、模板字符串 (表达式、函数的调用、变量)2、repeat(次数)函数 : 将目标字符串重复N次,返回一个新的字符串,不影响目标字符串3、includes()函数 :判断字符串中是否含有指定的子字符串,返回…

mysql 8 新旧密码可以同时生效

在MySQL8.0以前版本,给MySQL更改密码,明确写到开发规范中,拒绝更在线更改更密码,因为在8.0以前操作非常麻烦且不太完美。 MySQL 8.0之前的处理方法: 1. 创建一个同样权限的帐号通过 show grants for ‘user_name’1…

通用vue编辑按钮和新建按钮事件逻辑

一、编辑按钮对话框 1.首先先创建一个文件夹page-model,在里面使用elemengt-plus提供的对话框组件el-dialog。 2.在page-model里面去使用之前封装好的form表单,就是之前封装好的搜索组件的hy-form 3.在form组件里面加一个插槽,对应 page-m…

微信小程序:会议OA项目-首页

目录 一、flex布局 Flex布局简介 什么是flex布局? flex属性 flex的属性 二、轮播图组件及mockjs的使用 三、会议OA小程序首页布局 一、flex布局 Flex布局简介 布局的传统解决方案,基于盒状模型,依赖 display属性 position属性 float…

CompletableFuture详解

CompletableFuture详解 概要 RunnableThread虽然提供了多线程的能力但是没有返回值。CallableThread的方法提供多线程和返回值的能力但是在获取返回值的时候会阻塞主线程。 上述的情况只适合不关心返回值,只要提交的Task执行了就可以。另外的就是能够容忍等待。 C…

Java并发容器

一、并发容器总结1、大部分在 java.util.concurrent 包中。ConcurrentHashMap: 线程安全的HashMapCopyOnWriteArrayList: 线程安全的List,在读多写少的场合性能非常好,远远好于Vector.ConcurrentLinkedQueue: 高效的并发队列,使用链表实现。可…

[ 数据结构 ] 平衡二叉树(AVL)--------左旋、右旋、双旋

0 引出 数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST), 并分析问题所在 回顾:二叉搜索树 左子树全部为空,从形式上看,更像一个单链表.插入速度没有影响查询速度明显降低(因为需要依次比较), 不能发挥 BST的优势,因为每次还需要…

第四十二章 动态规划——数字三角形模型

第四十二章 动态规划——数字三角形模型一、数字三角形模型1、什么是数字三角形模型二、例题1、AcWing 1015. 摘花生(1)问题(2)思路状态表示状态转移循环设计初末状态(3)代码2、AcWing 1018. 最低通行费&am…

第二章:感知机

文章目录2.1感知机模型2.2感知机策略2.3梯度下降法2.4感知机-原始算法形式2.5感知机-原始算法实例2.6感知机-对偶形式2.7感知机-对偶形式实例2.8感知机算法收敛性证明如下:2.1感知机模型 2.2感知机策略 损失函数非负,策略是选择使其最小的模型参数 2.3梯…

【Linux工具】-gcc/g++

gcc/g一,简介二,代码的翻译过程1,预处理2,编译3,汇编4,链接(1)静态库(2)动态库(3)动静态库比较三,常见选项一,…

模板(C++)

模板(C)泛型编程函数模板概念格式原理实例化匹配原则类模板定义格式实例化泛型编程 如何实现一个通用的交换函数呢? void Swap(int& left, int& right) {int tmp left;left right;right tmp; }void Swap(double& left, doub…

【Spring6源码・IOC】BeanDefinition的加载

哎呀,又是午夜时分,又是一个失眠的夜晚,和去年一样,记得去年今日,也是睡不着觉,就注册了csdn的账号,开始写东西,csdn真是深夜最好的安魂剂。 Spring都发布了6.0,这不赶紧…

2022.12青少年软件编程(Python)等级考试试卷(三级)

2022.12.10青少年软件编程(Python)等级考试试卷(三级) 一、单选题(共25题,共50分) 1.列表L1中全是整数,小明想将其中所有奇数都增加1,偶数不变,于是编写了如下图所示的代码。 请问,图中红线处,代码应该是?(D) A. x || 2 B. x ^ 2 C. x && 2 D. x %…

JS日期与字符串相互转换(时间格式化YYYY-MM-DD,Dayjs的使用)

JS日期与字符串相互转换——JS封装函数,Dayjs转换时间格式相关文章调用场景复现一、JS封装函数1、日期转字符串2、字符串转日期二、 Dayjs转换时间格式1、Dayjs快速安装与使用2、Dayjs格式化日期相关文章调用 文章内容文章链接JS数组对象——根据日期进行排序&…

南邮数据结构考研常用算法

1.链表 在带头结点的链表中,删除所有值为x的结点 void Del_X(Linklist &L,ElemType x){LNode *pL->next, *preL,*q;while (p!null){if (p->datax){qp;pp->next;pre->nextp;free(q);}else{prep;pp->next;}} }使用单链表进行插入排序 ListNode*…

数组常用方法总结 (1) :pop / push / shift / unshift

pop 从尾部删除一项。改变原有数组。返回删除掉的内容。 <template><div class"myBlock"><div class"tableBlock"><div class"title">{{ newObject ? "操作后的数组" : "操作前的数组" }}</d…

从0到1完成一个Vue后台管理项目(十、列表API封装、Table列表渲染、表格数据转换)

往期 从0到1完成一个Vue后台管理项目&#xff08;一、创建项目&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;二、使用element-ui&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;三、使用SCSS/LESS&#xff0c;安装图标库&#xff09; 从0到1完成一个Vu…