欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nodejs使用SQL模糊查詢的過程詳解

 更新時(shí)間:2024年07月23日 08:29:08   作者:smileNicky  
最近在改一個(gè)比較久的項(xiàng)目,是使用nodejs寫的,但是對(duì)于長(zhǎng)期寫java的后端開發(fā)來說,還是有點(diǎn)難維護(hù),不過不改bug的話,就需要重新開發(fā),所以本文介紹了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)文章

  • nodejs解析xml文件方式(xml->json)

    nodejs解析xml文件方式(xml->json)

    這篇文章主要介紹了nodejs解析xml文件方式(xml->json),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Node.js從字符串生成文件流的實(shí)現(xiàn)方法

    Node.js從字符串生成文件流的實(shí)現(xiàn)方法

    這篇文章主要介紹了Node.js從字符串生成文件流的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Node.js自動(dòng)生成API文檔的實(shí)現(xiàn)

    Node.js自動(dòng)生成API文檔的實(shí)現(xiàn)

    本文主要介紹了Node.js自動(dòng)生成API文檔,包含基于swagger-jsdoc+swagger-ui-express快速實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • Node.js如何對(duì)SQLite的async/await封裝詳解

    Node.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-02
  • node.js中module模塊的功能理解與用法實(shí)例分析

    node.js中module模塊的功能理解與用法實(shí)例分析

    這篇文章主要介紹了node.js中module模塊的功能理解與用法,結(jié)合實(shí)例形式分析了node.js module模塊的基本功能、原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • Node.js的Koa框架上手及MySQL操作指南

    Node.js的Koa框架上手及MySQL操作指南

    Node世界中新興的Koa框架比Express更加輕便,且擴(kuò)展對(duì)數(shù)據(jù)庫(kù)操作的支持十分強(qiáng)大,這里我們就來看一下Node.js的Koa框架上手及MySQL操作指南:
    2016-06-06
  • node.js 使用 net 模塊模擬 websocket 握手進(jìn)行數(shù)據(jù)傳遞操作示例

    node.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)方法

    今天小編就為大家分享一篇一個(gè)簡(jiǎn)單的node.js界面實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Nodejs高并發(fā)原理示例詳解

    Nodejs高并發(fā)原理示例詳解

    這篇文章主要為大家介紹了Nodejs高并發(fā)原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • connect中間件session、cookie的使用方法分享

    connect中間件session、cookie的使用方法分享

    今天大象哥用了下connect的session和cookie,感覺還挺好用的,分享一下(里面坑挺多的,文檔寫的太模糊了,費(fèi)了哥不少時(shí)間)。
    2014-06-06

最新評(píng)論