Nodejs使用SQL模糊查詢的過程詳解
最近在改一個(gè)比較久的項(xiàng)目,是使用nodejs寫的,但是對(duì)于長(zhǎng)期寫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)文章
Node.js從字符串生成文件流的實(shí)現(xiàn)方法
這篇文章主要介紹了Node.js從字符串生成文件流的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08Node.js自動(dòng)生成API文檔的實(shí)現(xiàn)
本文主要介紹了Node.js自動(dòng)生成API文檔,包含基于swagger-jsdoc+swagger-ui-express快速實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03Node.js如何對(duì)SQLite的async/await封裝詳解
這篇文章主要給大家介紹了關(guān)于Node.js如何對(duì)SQLite的async/await進(jìn)行封裝的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02node.js中module模塊的功能理解與用法實(shí)例分析
這篇文章主要介紹了node.js中module模塊的功能理解與用法,結(jié)合實(shí)例形式分析了node.js module模塊的基本功能、原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-02-02node.js 使用 net 模塊模擬 websocket 握手進(jìn)行數(shù)據(jù)傳遞操作示例
這篇文章主要介紹了node.js 使用 net 模塊模擬 websocket 握手進(jìn)行數(shù)據(jù)傳遞操作,結(jié)合實(shí)例形式分析了node.js基于net模塊模擬 websocket握手相關(guān)原理及進(jìn)行數(shù)據(jù)傳遞具體操作技巧,需要的朋友可以參考下2020-02-02一個(gè)簡(jiǎn)單的node.js界面實(shí)現(xiàn)方法
今天小編就為大家分享一篇一個(gè)簡(jiǎn)單的node.js界面實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06connect中間件session、cookie的使用方法分享
今天大象哥用了下connect的session和cookie,感覺還挺好用的,分享一下(里面坑挺多的,文檔寫的太模糊了,費(fèi)了哥不少時(shí)間)。2014-06-06