Node.js + Mysql 防止sql注入的写法

关键代码

    const queryString = 'SELECT * FROM sys_user LIMIT ?, ?';let data =  await query(queryString, [startIndex,pageSize]); 

访问数据库相关代码

const mysql = require('mysql')const pool = mysql.createPool({host: '127.0.0.1',user: 'root',password: '123456',database: 'lzwj_data',port: 3306
})function camelCaseKeys(obj) {const result = {};for (let key in obj) {let newKey = key[0].toLowerCase() + key.slice(1).replace(/_([a-z])/g, function($0,$1){return $1.toUpperCase();});result[newKey] = obj[key];}return result;
}let query = function( sql, values ) {// 返回一个 Promisereturn new Promise(( resolve, reject ) => {pool.getConnection(function(err, connection) {if (err) {reject( err )} else {connection.query(sql, values, ( err, rows) => {if ( err ) {reject( err )} else {rows = rows.map(item => camelCaseKeys(item));resolve( rows )}// 结束会话connection.release()})}})})
}module.exports =  query

一个分页查询人员信息的完整代码,查询语句实现了防止sql注入

router.get('/api/user/page', async (req, res) => {let pageNo = req.query.pageNo;let pageSize = sysUtils.strToInt(req.query.pageSize);const startIndex = sysUtils.strToInt((pageNo - 1) * pageSize);const queryString = 'SELECT * FROM sys_user LIMIT ?, ?';let data =  await query(queryString, [startIndex,pageSize]); const countSql = 'select count(*) count from sys_user'let countData =  await query(countSql); let count = sysUtils.strToInt(countData[0].count);let pageData = {total : count,   pages : sysUtils.pageCount(count,pageSize),records : data}res.send({status: 200,success : true,message: '',data: pageData,})
})

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

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

相关文章

【C语言】静动态内存的跨函数访问malloc、free

目录 多指针初认识&#xff1a;动态内存和多级指针的跨函数访问动态内存和静态内存的比较&#xff1a;静态内存不可以跨函数访问&#xff1a;动态内存跨函数访问&#xff1a;malloc和free示例 多指针初认识&#xff1a; #include <stdio.h> #include <stdlib.h> in…

技术查漏补缺(1)Logback

一、下定义&#xff1a;Logback是一个开源的日志组件 二、Logback的maven <!--这个依赖直接包含了 logback-core 以及 slf4j-api的依赖--> <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><v…

新手解锁语言之力:理解 PyTorch 中 Transformer 组件

目录 torch.nn子模块transformer详解 nn.Transformer Transformer 类描述 Transformer 类的功能和作用 Transformer 类的参数 forward 方法 参数 输出 示例代码 注意事项 nn.TransformerEncoder TransformerEncoder 类描述 TransformerEncoder 类的功能和作用 Tr…

vite + vue3引入ant design vue 报错

npm install ant-design-vue --save下载插件并在main.ts 全局引入 报错 解决办法一&#xff1a; main.ts注释掉全局引入 模块按需引入 解决办法二 将package.json中的ant-design-vue的版本^4.0.0-rc.4改为 ^3.2.15版本 同时将将package-lock.json中的ant-design-vue的版本…

Android13 热点默认5G频道配置修改

Android13 热点默认5G频道配置修改 文章目录 Android13 热点默认5G频道配置修改一、前言二、修改默认配置1、代码中修改默认配置2、保存默认配置文件设置默认5G频段配置热点配置文件完整信息示例&#xff1a; 3、代码中强制设置配置信息&#xff08;1&#xff09;在关键流程设置…

Graceful Response 构建 Spring Boot 下优雅的响应处理

一、Graceful Response Graceful Response 是一个 Spring Boot 技术栈下的优雅响应处理器&#xff0c;提供一站式统一返回值封装、全局异常处理、自定义异常错误码等功能&#xff0c;使用Graceful Response进行web接口开发不仅可以节省大量的时间&#xff0c;还可以提高代码质…

小白综述:深度学习 OCR 图片文字识别

文章目录 1. OCR 算法流程1.1 传统 OCR 方法1.2 深度学习 OCR 方法1.2.1 two-stage方法&#xff1a;文字检测识别1.2.2 端到端方法 2. 文本检测算法3. 文本识别算法3.1 基于分割的单字符识别方法3.2 基于序列标注的文本行识别方法 1. OCR 算法流程 OCR (Optical Character Rec…

揭开 JavaScript 作用域的神秘面纱(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

简单vlan划分和dhcp中继(Cisco Packet Tracer模拟)

文章目录 1. 前言2. 功能实现2.1. dhcp服务器接入2.2. 学校web服务器2.3. 设置学校dns服务器2.4. 设置线路冗余2.5. 配置ac。 1. 前言 在这里我们的计网作业是使用思科的Cisco Packet Tracer进行对校园网的简单规划&#xff0c;这里我对校园网进行了简单的规划&#xff0c;功能…

前端页面的生命周期

性能问题呈现给用户的感受往往就是简单而直接的&#xff1a;加载资源缓慢、运行过程卡顿或响应交互延迟等。而在前端工程师的眼中&#xff0c;从域名解析、TCP建立连接到HTTP的请求与响应&#xff0c;以及从资源请求、文件解析到关键渲染路径等&#xff0c;每一个环节都有可能因…

django websocket实现聊天室功能

注意事项channel版本 django2.x 需要匹配安装 channels 2 django3.x 需要匹配安装 channels 3 Django3.2.4 channels3.0.3 Django3.2.* channels3.0.2 Django4.2 channles3.0.5 是因为最新版channels默认不带daphne服务器 直接用命令 python manage.py runsever 默认运行的是w…

K8S中的hostPort、NodePort 、targetPort、port、containerPort 的区别

Dockerfile的EXPOSE Dockerfile中端口的声明: EXPOSE <端口1> [<端口2>...] 所以:EXPOSE的 第一个作用:只是说明docker容器开放了哪些端口,并没有将这些端口实际开放了出来!更多的作用是告诉运维人员或容器操作人员我开放了容器的哪些端口,只是一种说明。 …

WEB前端知识点整理(JQUERY+Bootstrap+ECharts)

1.JQUERY的概述&#xff1a; jQuery 是一个 JavaScript 库。jQuery 极大地简化了JavaScript 编程&#xff0c;它很容易学习。 jQuery库包含以下功能&#xff1a;HTML 元素选取&#xff1b;HTML 元素操作&#xff1b;CSS 操作&#xff1b;HTML 事件函数&#xff1b;JavaScript …

技术学习|CDA level I 业务分析方法

业务分析方法有三个主要构成部分&#xff1a;业务指标分析、业务模型分析及业务分析方法。 业务指标分析是发现业务问题的核心方法&#xff1a;用于通用指标和场景指标的计算及分析方法&#xff0c;以及指标体系的设计与应用方法。业务模型是从一系列业务行为中抽象出来的信息…

250:vue+openlayers 加载geotiff文件,并在地图上显示

第250个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中加载geotiff文件,并在地图上显示。这里使用到了WebGLTile图层和GeoTIFF脚本模块。这里一定要注意GeoTIFF的数据加载方式,要数组的模式。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现…

机器视觉系统选型-环境配置:报错序列不包含任何元素 的解决方法

描述 环境&#xff1a;VM4.0.0VS2015 及以上 现象&#xff1a;配置环境后&#xff0c;获取线线测量模块结果&#xff0c;报错“序列不包含任何元素”。如下图所示&#xff1a; 解答 将“\VisionMaster4.0.0\Development\V4.0.0 \ComControls\bin\x64”下整体重新拷贝。

初识大数据,一文掌握大数据必备知识文集(12)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

大模型加速库flash-attention的安装教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

CSS基础笔记-02动画

CSS基础笔记系列 《CSS基础笔记-01CSS概述》 什么是动画 动画是一种综合艺术&#xff0c;它集合了绘画、电影、数字媒体、摄影、音乐、文学等多种艺术门类于一身。具体来说&#xff0c;动画是通过在连续多格的胶片上拍摄一系列单个画面&#xff0c;然后连续播放&#xff0c;…

七牛云cdn图片加载错误:net::ERR_HTTP2_PROTOCOL_ERROR与HTTP2 检测工具

一、问题描述 今天运营的小伙伴提了个问题&#xff0c;她在后台上传图片的时候有时会遇到上传成功了&#xff0c;但实际回显图片却是一张“破图”&#xff1a; 二、原因调查 先了解一下ERR_HTTP2_PROTOCOL_ERROR是什么意思&#xff1a; ERR_HTTP2_PROTOCOL_ERROR是由HTTP/2协…