Nodejs使用SQL模糊查詢的過程詳解
最近在改一個(gè)比較久的項(xiàng)目,是使用nodejs寫的,但是對(duì)于長期寫java的后端開發(fā)來說,還是有點(diǎn)難維護(hù),不過不改bug的話,就需要重新開發(fā),所以只能慢慢看nodejs代碼,測(cè)試人員提了一個(gè)需要支持模糊查詢的bug,如果是java寫的,可以馬上改好,因?yàn)椴皇煜odejs代碼,還是改了一兩個(gè)小時(shí),邊找資料,邊改,記錄下來,方便回顧
實(shí)驗(yàn)環(huán)境
- VS Code

- Mysql 8.0.26
修改過程
最開始直接這樣改
exports.queryWordsList = function (req, res, next) {
var Words = DB.get('Words')
var params = req.body
var page = new Page({
pageNum: params.pageNum || 1,
pageSize: params.pageSize || 10,
})
delete params.pageNum
delete params.pageSize
var sql = `select t.id,t.name,t.words, t.type,t.tip_msg,t.replace_str,t.desc,
UNIX_TIMESTAMP(t.create_time)*1000 as create_time,
UNIX_TIMESTAMP(t.modify_time)*1000 as modify_time
from t_words t`
if (params.word) {
sql = `${sql} WHERE name like '%?%' order by t.modify_time desc`
} else {
sql = `${sql} order by t.modify_time desc`
}
Words.queryPageBySql(sql,page,[params.word],function (err, result) {
if (err) {
res.json({ rescode: '10001', err: err })
return
}
var list = page.list
res.json({ rescode: '10000', data: result })
}
)
}
運(yùn)行后,發(fā)現(xiàn)報(bào)錯(cuò)
{
"rescode": "10001",
"err": {
"code": "ER_PARSE_ERROR",
"errno": 1064,
"sqlMessage": "You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near '其'%' order by t.modify_time desc ) T' at line 4",
"sqlState": "42000",
"index": 0,
"sql": "select count(*) as count from ( select t.id,t.name,t.type,t.tip_msg,t.replace_str,t.desc,\n UNIX_TIMESTAMP(t.create_time)*1000 as create_time,\n UNIX_TIMESTAMP(t.modify_time)*1000 as modify_time\n from t_words t WHERE name like '%'其'%' order by t.modify_time desc ) T"
},
"status": false,
"req_id": "1713148803682.74"
}
所以,修改一下,傳一個(gè)參數(shù)進(jìn)去
exports.queryWordsList = function (req, res, next) {
var Words = DB.get('Words')
var params = req.body
var page = new Page({
pageNum: params.pageNum || 1,
pageSize: params.pageSize || 10,
})
delete params.pageNum
delete params.pageSize
var sql = `select t.id,t.name,t.type,t.tip_msg,t.replace_str,t.desc,
UNIX_TIMESTAMP(t.create_time)*1000 as create_time,
UNIX_TIMESTAMP(t.modify_time)*1000 as modify_time
from t_words t`
if (params.word) {
sql = `${sql} WHERE name like ? order by t.modify_time desc`
} else {
sql = `${sql} order by t.modify_time desc`
}
var queryWord = "%" + params.word + "%";
Words.queryPageBySql(sql,page,[queryWord],function (err, result) {
if (err) {
res.json({ rescode: '10001', err: err })
return
}
var list = page.list
res.json({ rescode: '10000', data: result })
}
)
}
ok,經(jīng)過測(cè)試,可以查詢,不過測(cè)試,對(duì)于傳入"其%"這樣的查詢字符,sql是直接當(dāng)成關(guān)鍵字“其”進(jìn)行模糊查詢的,直接忽略了特殊符號(hào)“%”,所以要支持這種特殊符號(hào)查詢,可以加上轉(zhuǎn)義字符,暫時(shí)這樣處理
sql = `${sql} WHERE name LIKE ? ESCAPE '\\' ORDER BY t.modify_time DESC`;
var queryWord = "%" + params.word.replace(/\\/g, "\\\\").replace(/%/g, "\\%") + "%";
到此這篇關(guān)于Nodejs使用SQL模糊查詢的過程詳解的文章就介紹到這了,更多相關(guān)Nodejs SQL模糊查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
electron demo項(xiàng)目npm install安裝失敗的解決方法
下面小編就為大家分享一篇electron demo項(xiàng)目npm install安裝失敗的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-02-02
在Linux系統(tǒng)上升級(jí)Node.js遇到GLIBC依賴問題的多種解決方案
在現(xiàn)代 Web 開發(fā)和 DevOps 實(shí)踐中,Node.js 是一個(gè)不可或缺的工具,在升級(jí) Node.js 版本時(shí),尤其是在較舊的 Linux 系統(tǒng)上,可能會(huì)遇到一些依賴庫不兼容的問題,特別是與 GLIBC 和 GLIBCXX 相關(guān)的錯(cuò)誤,本文將詳細(xì)介紹如何解決這個(gè)依賴問題,需要的朋友可以參考下2025-01-01
測(cè)試驅(qū)動(dòng)ChatGPT編程示例詳解
這篇文章主要為大家介紹了測(cè)試驅(qū)動(dòng)ChatGPT編程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
Node.js中的EventEmitter類使用小結(jié)
EventEmitter 是 Node.js 中的一個(gè)核心模塊,它提供了一種實(shí)現(xiàn)事件驅(qū)動(dòng)編程的機(jī)制,它是一個(gè)基于觀察者模式的類,用于在應(yīng)用程序中處理事件和觸發(fā)事件,這篇文章主要介紹了Node.js中的EventEmitter類介紹,需要的朋友可以參考下2023-12-12
nodejs簡單實(shí)現(xiàn)操作arduino
本文給大家分享的是使用nodejs來驅(qū)動(dòng)arduino,主要是基于cylonjs 和 gort,有需要的小伙伴可以參考下2016-09-09
基于NodeJS的前后端分離的思考與實(shí)踐(六)Nginx + Node.js + Java 的軟件棧部署實(shí)踐
關(guān)于前后端分享的思考,我們已經(jīng)有五篇文章闡述思路與設(shè)計(jì)。本文介紹淘寶網(wǎng)收藏夾將 Node.js 引入傳統(tǒng)技術(shù)棧的具體實(shí)踐。2014-09-09
Node.js + Redis Sorted Set實(shí)現(xiàn)任務(wù)隊(duì)列
本文給大家分享的是使用Node.js + Redis Sorted Set實(shí)現(xiàn)任務(wù)隊(duì)列的方法示例,非常的實(shí)用,有需要的小伙伴可以參考下2016-09-09
基于Node.js實(shí)現(xiàn)大文件斷點(diǎn)續(xù)傳的完整方案
本文介紹了Vue前端和Node.js后端實(shí)現(xiàn)大文件斷點(diǎn)續(xù)傳的方法,前端通過分片上傳、計(jì)算文件哈希、記錄已上傳分片索引實(shí)現(xiàn)斷點(diǎn)續(xù)傳;后端提供檢查和上傳分片、合并文件的接口,通過并發(fā)控制、錯(cuò)誤重試等技術(shù)提高上傳效率和穩(wěn)定性,需要的朋友可以參考下2026-04-04

