最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用nodejs連接mySQL寫(xiě)接口全過(guò)程(增刪改查)

 更新時(shí)間:2023年12月20日 10:02:25   作者:撒個(gè)辣醬  
這篇文章主要給大家介紹了關(guān)于使用nodejs連接mySQL寫(xiě)接口(增刪改查)的相關(guān)資料,MySQL是一種常用的關(guān)系型數(shù)據(jù)庫(kù),它與Node.js的結(jié)合可以提供強(qiáng)大的數(shù)據(jù)存儲(chǔ)和檢索功能,需要的朋友可以參考下

前言

提示:請(qǐng)先建好mySQL數(shù)據(jù)庫(kù),本案例所用node版本為16.20.0:

提示:以下是本篇文章正文內(nèi)容,下面案例可供參考

一、navicat建立鏈接

文件-新建鏈接-MySQL

默認(rèn)端口為3306,連接名自定,密碼為安裝MySQL設(shè)置的數(shù)據(jù)庫(kù)密碼

二、建數(shù)據(jù)庫(kù)表

打開(kāi)或新建一個(gè)數(shù)據(jù)庫(kù),建立一張新表,設(shè)計(jì)好字段后加入兩條測(cè)試數(shù)據(jù)

此處建立表名為userList(后面會(huì)用到)

字段:name, password, money, userId, sex, company, job

三、新建nodejs項(xiàng)目,建議直接使用Hbuilder編輯器快速創(chuàng)建

提示:請(qǐng)一定要確認(rèn)nodejs版本是否與npm版本有沖突

打開(kāi)Hbuilder,文件-新建-項(xiàng)目,選擇Express項(xiàng)目

四、新建的項(xiàng)目在vscode打開(kāi)后,進(jìn)入app.js

1、在項(xiàng)目?jī)?nèi)寫(xiě)入啟動(dòng)項(xiàng)目的代碼

提示:?jiǎn)?dòng)代碼需寫(xiě)在var app = express();代碼之后,否則報(bào)錯(cuò)

本案例將服務(wù)啟動(dòng)在2323端口

app.listen(2323, () => console.log('服務(wù)已啟動(dòng)在2323端口'))

2、文件夾右鍵,在集成終端中打開(kāi),輸入node app.js啟動(dòng)服務(wù)

啟動(dòng)成功后會(huì)在終端內(nèi)顯示你 打印的字樣,說(shuō)明啟動(dòng)成功

此時(shí)可寫(xiě)一個(gè)簡(jiǎn)單的get接口來(lái)測(cè)試是否有問(wèn)題

app.get('/', (req, res) => {
  res.json('helloWord')
})

寫(xiě)入此代碼后,進(jìn)入localhost:2323/或者127.0.0.1:2323/,則返回helloWord

此時(shí)證明服務(wù)器沒(méi)問(wèn)題了

五、建立MySQL鏈接

因Hbuilder建立的express項(xiàng)目并沒(méi)有下載Mysql插件,所以需在終端自行下載

直接在終端運(yùn)行 npm install mysql 即可

下載成功后在router文件夾下index.js下建立鏈接,在此處編寫(xiě)具體接口代碼
代碼示例:

const mysql = require('mysql');

// 鏈接數(shù)據(jù)庫(kù)
const conn = mysql.createConnection({ 
  user:'root',          //用戶名使用前面數(shù)據(jù)庫(kù)建立鏈接里的用戶名
  password:'******',	//密碼
  port:3306,
  host:'localhost',		//主機(jī)(默認(rèn)都是local host)
  database:'node'       //數(shù)據(jù)庫(kù)名注意?。?!不是你新建連接起的連接名
})
// 測(cè)試連接
conn.connect(err=>{
  console.log(err,'連接成功');
})

啟動(dòng)項(xiàng)目后如果返回null,鏈接成功,則鏈接數(shù)據(jù)庫(kù)成功

六、簡(jiǎn)單查詢列表

提示:此處開(kāi)始用到sql語(yǔ)句,請(qǐng)?jiān)趎avicat運(yùn)行成功后再進(jìn)行編寫(xiě)

代碼示例:

index.js

// 獲取用戶列表
router.get('/getList', (req, res, next) => {
  // sql語(yǔ)句查詢列表所有數(shù)據(jù)  SELECT * FROM 你數(shù)據(jù)庫(kù)的表名,我這里是userList
    let sql = "SELECT * FROM userlist";
  conn.query(sql, (err, r) => {
    res.json({code: 200, data: r, msg: '成功'})
  })
});

postman測(cè)試結(jié)果:

七、添加數(shù)據(jù)

代碼示例:

index.js

// 在index.js同目錄下創(chuàng)建新的interface.js文件,并在index.js最上面引入文件interface.js
var interface = require('./interface')
// 添加用戶接口
router.post('/addUser', (req, res) => {
  interface.addUser(conn, req, res)
})

interface.js代碼示例: 此處設(shè)置了用戶名和密碼必須傳遞,否則失敗

此處使用了隨機(jī)生成id函數(shù)randomId

// 添加用戶
const addUser = (conn, req, res) => {
    const params = req.body
    // console.log(params);
    const ret = {}
    if (params.name == '') {
        ret.code = 501
        ret.data = null
        ret.msg = '請(qǐng)傳遞用戶名'
        res.json(ret)
        return
    } else if (params.password == '') {
        ret.code = 501
        ret.data = null
        ret.msg = '請(qǐng)?jiān)O(shè)置用戶密碼'
        res.json(ret)
        return
    } else {
        conn.query(`INSERT INTO userlist(name,password,money,userid,sex,company,job)VALUES(
            '${params.name}','${params.password}','${params.money}','${randomId()}','${params.sex}','${params.company}','${params.job}')`,
            function (error, results, fields) {
            if (error) {
                ret.code = 500
                ret.data = null
                ret.msg = error.sqlMessage
                return
            }
            if (results.length === 0) {
                ret.code = 501
                ret.message = '請(qǐng)傳遞正確的參數(shù)'
            } else {
                ret.code = 200
                ret.data = null
                ret.msg = '添加成功'
            }
            res.json(ret)
        })
    }
}

const randomId = function uuid(){
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
        var r = Math.random() * 16 | 0,
            v = c == 'x' ? r : (r & 0x3 | 0x8);
        return v.toString(16);
    });		
}

//最后exports
exports.addUser = addUser

postman測(cè)試結(jié)果:

此時(shí)查看數(shù)據(jù)庫(kù)表,會(huì)多出一條剛剛添加的數(shù)據(jù)

八、修改數(shù)據(jù)

index.js代碼示例:

// 修改用戶接口
router.post('/updateUser', (req, res) => {
  interface.updateUser(conn, req, res)
})

interface.js代碼示例: 傳遞參數(shù)比添加多了一個(gè)userId

// 修改用戶
const updateUser = (conn, req, res) => {
    const params = req.body
    // console.log(params);
    const ret = {}
    if (params.name == '') {
        ret.code = 501
        ret.data = null
        ret.msg = '請(qǐng)傳遞用戶名'
        res.json(ret)
        return
    } else if (params.password == '') {
        ret.code = 501
        ret.data = null
        ret.msg = '請(qǐng)?jiān)O(shè)置用戶密碼'
        res.json(ret)
        return
    } else if (params.userId == '') {
        ret.code = 501
        ret.data = null
        ret.msg = '請(qǐng)傳遞用戶id'
        res.json(ret)
        return
    } else {
        conn.query(`UPDATE userlist SET 
        name="${params.name}",
        password="${params.password}",
        money="${params.money}",
        sex="${params.sex}",
        company="${params.company}",
        job="${params.job}" WHERE userId="${params.userId}";`,
            function (error, results, fields) {
                if (error) {
                    ret.code = 500
                    ret.data = null
                    ret.msg = error.sqlMessage
                    return
                }
                if (results.length === 0) {
                    ret.code = 501
                    ret.message = '請(qǐng)傳遞正確的參數(shù)'
                } else {
                    ret.code = 200
                    ret.data = null
                    ret.msg = '修改成功'
                }
                res.json(ret)
            })
    }
}

//最后exports
exports.updateUser = updateUser

postman測(cè)試結(jié)果:

修改成功后刷新數(shù)據(jù)庫(kù)表,對(duì)應(yīng)userId的數(shù)據(jù)會(huì)更改

九、刪除數(shù)據(jù)

index.js代碼示例:

// 刪除用戶接口
router.post('/deleteUser', (req, res) => {
  interface.deleteUser(conn, req, res)
})

interface.js代碼示例: 參數(shù)僅傳userId

// 刪除用戶
const deleteUser = (conn, req, res) => {
    const params = req.body
    // console.log(params);
    const ret = {}
    if (params.userId == '') {
        ret.code = 501
        ret.data = null
        ret.msg = '請(qǐng)傳遞用戶id'
        res.json(ret)
        return
    } else { 
        conn.query(`DELETE FROM userlist WHERE userId="${params.userId}";`,
            function (error, results, fields) {
                // console.log(error);
                if (error) {
                    ret.code = 500
                    ret.data = null
                    ret.msg = error.sqlMessage
                    return
                }
                if (results.length === 0) {
                    ret.code = 501
                    ret.message = '請(qǐng)傳遞正確的參數(shù)'
                } else {
                    ret.code = 200
                    ret.data = null
                    ret.msg = '刪除成功'
                }
                res.json(ret)
            })
    }
}

//最后exports
exports.deleteUser = deleteUser

postman測(cè)試結(jié)果:刪除剛剛修改的那一條

成功后刷新數(shù)據(jù)庫(kù)表,剛剛那條數(shù)據(jù)發(fā)現(xiàn)已刪除

總結(jié)

本人nodejs僅還在學(xué)習(xí)階段,希望能對(duì)學(xué)習(xí)nodejs的小伙伴有所幫助!

到此這篇關(guān)于使用nodejs連接mySQL寫(xiě)接口(增刪改查)的文章就介紹到這了,更多相關(guān)nodejs連接mySQL寫(xiě)接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

尼勒克县| 梅州市| 平原县| 平阳县| 鄯善县| 泰来县| 张家界市| 图们市| 信宜市| 旬阳县| 赤峰市| 德庆县| 自贡市| 红河县| 牙克石市| 大丰市| 衡阳市| 澄迈县| 林芝县| 庆城县| 伊春市| 双辽市| 定兴县| 布尔津县| 读书| 神池县| 宁晋县| 卓资县| 府谷县| 洪湖市| 本溪市| 伽师县| 昌宁县| 肇庆市| 翼城县| 江口县| 纳雍县| 桐庐县| 互助| 贞丰县| 巢湖市|