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

Vue項(xiàng)目通過(guò)node連接MySQL數(shù)據(jù)庫(kù)并實(shí)現(xiàn)增刪改查操作的過(guò)程詳解

 更新時(shí)間:2022年05月09日 10:18:46   作者:呦呀  
最近在研究vue項(xiàng)目中使用node.js搭建server服務(wù)器,鏈接本地mysql數(shù)據(jù)庫(kù),進(jìn)行數(shù)據(jù)操作,下面這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目通過(guò)node連接MySQL數(shù)據(jù)庫(kù)并實(shí)現(xiàn)增刪改查操作的相關(guān)資料,需要的朋友可以參考下

Vue項(xiàng)目通過(guò)node連接MySQL數(shù)據(jù)庫(kù)

1.創(chuàng)建Vue項(xiàng)目

vue create 項(xiàng)目名

Vue項(xiàng)目創(chuàng)建的詳細(xì)步驟,有需要的可移步這里

2.下載安裝需要的插件

下載express

npm install express

下載cors,用于處理接口跨域問(wèn)題

npm install cors

下載mysql

npm install mysql

下載axios

npm install axios

3.在項(xiàng)目中創(chuàng)建server文件夾,用于搭建本地服務(wù)器

新建/server/app.js,用于配置服務(wù)器相關(guān)信息

let express = require('express')
let app = express()
let cors = require('cors')
let bodyParser = require('body-parser')

app.use(bodyParser.json());  //配置解析,用于解析json和urlencoded格式的數(shù)據(jù)
app.use(bodyParser.urlencoded({extended: false}));
app.use(cors())              //配置跨域,必須在路由之前

app.listen(80, () => {
    console.log('服務(wù)器啟動(dòng)成功');
})

新建/server/db/index.js,用于配置數(shù)據(jù)庫(kù)相關(guān)信息

let mysql = require('mysql')

let db = mysql.createPool({
    host: '127.0.0.1',     //數(shù)據(jù)庫(kù)IP地址
    user: 'root',          //數(shù)據(jù)庫(kù)登錄賬號(hào)
    password: 'root',      //數(shù)據(jù)庫(kù)登錄密碼
    database: 'test'       //要操作的數(shù)據(jù)庫(kù)
})

module.exports = db

新建/server/API/user.js,用于操作數(shù)據(jù)庫(kù)

let db = require('../db/index')

exports.get = (req, res) => {
    var sql = 'select * from user'
    db.query(sql, [req.query.name, req.query.password], (err, data) => {
        if(err) {
            return res.send('錯(cuò)誤:' + err.message)
        }
        res.send(data)
    })
}

新建/server/router.js,用于配置對(duì)應(yīng)路由

let express = require('express')
let router = express.Router()
let user = require('./API/user')

router.get('/user', user.get)

module.exports = router

在/server/app.js中導(dǎo)入路由配置

let express = require('express')
let app = express()
let cors = require('cors')
let bodyParser = require('body-parser')
let router = require('./router')

app.use(bodyParser.json());  //配置解析,用于解析json和urlencoded格式的數(shù)據(jù)
app.use(bodyParser.urlencoded({extended: false}));
app.use(cors())              //配置跨域
app.use(router)              //配置路由

app.listen(80, () => {
    console.log('服務(wù)器啟動(dòng)成功');
})

測(cè)試服務(wù)器是否搭建成功

server文件夾下執(zhí)行

node app.js

提示“服務(wù)器啟動(dòng)成功”,瀏覽器打開(kāi)http://127.0.0.1/user,可看見(jiàn)user數(shù)據(jù)表中對(duì)應(yīng)的數(shù)據(jù),表示服務(wù)器搭建成功。

4.Vue項(xiàng)目訪問(wèn)接口獲取數(shù)據(jù)

<template>
  <div>
    <button @click="get()">獲取user表數(shù)據(jù)</button>
  </div>
</template>

<script>
import axios from "axios"
export default {
  data () {
    return {
    };
  },

  methods: {
    get() {
      axios.get('http://127.0.0.1/user').then(res=>{
          console.log(res.data);
      }).catch(err=>{
          console.log("獲取數(shù)據(jù)失敗" + err);
      })
    }
  }
}
</script>

執(zhí)行結(jié)果

注意:運(yùn)行項(xiàng)目前,一定要先啟動(dòng)服務(wù)器,只有服務(wù)器啟動(dòng)之后,接口才能被調(diào)用,所以需要打開(kāi)兩個(gè)終端,分別用于啟動(dòng)服務(wù)器和項(xiàng)目

數(shù)據(jù)表的增刪改查操作

1.服務(wù)器配置

新建/server/API/list.js,用于存放列表相關(guān)操作

let db = require('../db/index')

exports.all = (req, res) => {        //獲取info表全部數(shù)據(jù)
    var sql = 'select * from info'
    db.query(sql, (err, data) => {
        if(err) {
            return res.send('錯(cuò)誤:' + err.message)
        }
        res.send(data)
    })
}
exports.get = (req, res) => {        //通過(guò)id查詢數(shù)據(jù)
    var sql = 'select * from info where id = ?'    //?用于占位
    db.query(sql, [req.query.id], (err, data) => {
        if(err) {
            return res.send('錯(cuò)誤:' + err.message)
        }
        res.send(data)
    })
}

exports.del = (req, res) => {        //通過(guò)id刪除數(shù)據(jù)
    var sql = 'delete from info where id = ?'
    db.query(sql, [req.query.id], (err, data) => {
        if(err) {
            return res.send('錯(cuò)誤:' + err.message)
        }
        res.send(data)
    })
}

exports.add = (req, res) => {        //向info表添加數(shù)據(jù)
    var sql = 'insert into info (id,name,address,tel) values (?,?,?,?)'
    db.query(sql, [req.query.id, req.query.name, req.query.address, req.query.tel], (err, data) => {
        if(err) {
            return res.send('錯(cuò)誤:' + err.message)
        }
        res.send(data)
    })
}

exports.update = (req, res) => {        //通過(guò)id更新數(shù)據(jù)
    var sql = 'update info set name = ?, address = ?, tel = ? where id = ?'
    db.query(sql, [req.query.name, req.query.address, req.query.tel, req.query.id], (err, data) => {
        if(err) {
            return res.send('錯(cuò)誤:' + err.message)
        }
        res.send(data)
    })
}

在/server/router.js中配置對(duì)應(yīng)路由

let express = require('express')
let router = express.Router()
let user= require('./API/user')
let info = require('./API/list')

router.get('/user', user.get)
router.get('/list/all', info.all)
router.get('/list/get', info.get)
router.get('/list/add', info.add)
router.get('/list/update', info.update)
router.get('/list/del', info.del)

module.exports = router

2.前端配置 頁(yè)面樣式

(本人懶得寫(xiě)樣式了,隨便看看就好_(:з」∠)_)

注意:此處的頁(yè)面搭建本人使用了elementUI組件,CV前要先下載elementUI
在終端執(zhí)行 npm i element-ui -S ,同時(shí)在main.js中導(dǎo)入注冊(cè)即可

<template>
  <div id="box">
    <div class="left">
      <el-button type="primary" @click="all">獲取info表的全部數(shù)據(jù)</el-button>
      <h2>-----------------------------------</h2>
      <el-input v-model="id" placeholder="請(qǐng)輸入id" class="input"></el-input>
      <el-button type="danger" @click="del">刪除</el-button>
      <el-button type="primary" @click="get">查詢</el-button>
      <h2>-----------------------------------</h2>
      <el-input v-model="id" placeholder="請(qǐng)輸入id" class="input"></el-input>
      <el-input v-model="name" placeholder="請(qǐng)輸入姓名" class="input"></el-input>
      <el-input v-model="address" placeholder="請(qǐng)輸入地址" class="input"></el-input>
      <el-input v-model="tel" placeholder="請(qǐng)輸入電話" class="input"></el-input>
      <el-button type="primary" @click="add">添加</el-button>
      <el-button type="primary" @click="updata">修改</el-button>
    </div>
    <div class="right">
      <table class="hovertable">
        <tr>
          <th>ID</th><th>姓名</th><th>家庭住址</th><th>聯(lián)系電話</th>
        </tr>
        <tr v-for="(item, index) in info"  v-bind:key="index">
          <td>{{item.id}}</td>
          <td>{{item.name}}</td>
          <td>{{item.address}}</td>
          <td>{{item.tel}}</td>
        </tr>
      </table>
    </div>
  </div>
</template>

對(duì)應(yīng)的實(shí)現(xiàn)函數(shù)

<script>
import axios from "axios"
export default {
  data () {
    return {
      id: '',
      name: '',
      address: '',
      tel: '',
      info: []
    };
  },
  methods: {
    all() {    //查找info表全部數(shù)據(jù)
      axios.get('http://127.0.0.1/list/all').then(res=>{
          // console.log(res.data);
          this.info = res.data
      }).catch(err=>{
          console.log("獲取數(shù)據(jù)失敗" + err);
      })
    },
    del() {    //刪除操作
      axios.get('http://127.0.0.1/list/del',{
        params: {
          id: this.id
        }
      }).then(res=>{
          // console.log(res.data);
          this.all()
      }).catch(err=>{
          console.log("操作失敗" + err);
      })
    },
    get() {    //查詢操作
      axios.get('http://127.0.0.1/list/get',{
        params: {
          id: this.id
        }
      }).then(res=>{
          // console.log(res.data);
          this.info = res.data
      }).catch(err=>{
          console.log("獲取數(shù)據(jù)失敗" + err);
      })
    },
    add() {   //添加操作
      axios.get('http://127.0.0.1/list/add',{
        params: {
          id: this.id,
          name: this.name,
          address: this.address,
          tel: this.tel
        }
      }).then(res=>{
          // console.log(res.data);
          this.all()
      }).catch(err=>{
          console.log("獲取數(shù)據(jù)失敗" + err);
      })
    },
    update() {     //修改操作
      axios.get('http://127.0.0.1/list/update',{
        params: {
          id: this.id,
          name: this.name,
          address: this.address,
          tel: this.tel
        }
      }).then(res=>{
          // console.log(res.data);
          this.all()
      }).catch(err=>{
          console.log("獲取數(shù)據(jù)失敗" + err);
      })
    }
  }
}
</script>

效果展示

vue+mysql+node實(shí)現(xiàn)數(shù)據(jù)表增刪改查

再補(bǔ)充一點(diǎn):get請(qǐng)求傳參數(shù)據(jù)存放在req.query中;post請(qǐng)求傳參數(shù)據(jù)存放在req.body中。
文章中只展示了get請(qǐng)求,所以在此特別補(bǔ)充說(shuō)明一下
具體可參見(jiàn)vue登錄注冊(cè)案例,其中的登錄使用的是get請(qǐng)求,注冊(cè)使用的是post請(qǐng)求

文中的內(nèi)容都是一些相當(dāng)基礎(chǔ)的知識(shí),希望大家可以在看懂理解的基礎(chǔ)上多敲代碼,這樣才能有所進(jìn)步(雖然cv真的很快樂(lè))

總結(jié)

到此這篇關(guān)于Vue項(xiàng)目通過(guò)node連接MySQL數(shù)據(jù)庫(kù)并實(shí)現(xiàn)增刪改查操作的文章就介紹到這了,更多相關(guān)Vue node連接MySQL并增刪改查內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue3更高效的構(gòu)建工具Vite使用指南

    Vue3更高效的構(gòu)建工具Vite使用指南

    這篇文章主要給大家介紹了關(guān)于Vue3更高效的構(gòu)建工具Vite使用的相關(guān)資料,Vite是一種面向現(xiàn)代瀏覽器的一個(gè)更輕、更快的前端構(gòu)建工具,能夠顯著提升前端的開(kāi)發(fā)體驗(yàn),需要的朋友可以參考下
    2023-10-10
  • vue源碼入口文件分析(推薦)

    vue源碼入口文件分析(推薦)

    這篇文章主要介紹了vue源碼入口文件分析(推薦),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • 跟混亂的頁(yè)面彈窗說(shuō)再見(jiàn)

    跟混亂的頁(yè)面彈窗說(shuō)再見(jiàn)

    這篇文章主要介紹了跟混亂的頁(yè)面彈窗說(shuō)再見(jiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • vue項(xiàng)目中頁(yè)面跳轉(zhuǎn)傳參的方法總結(jié)

    vue項(xiàng)目中頁(yè)面跳轉(zhuǎn)傳參的方法總結(jié)

    在Vue項(xiàng)目中,你可以使用路由(vue-router)來(lái)實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)并傳遞參數(shù),這篇文章主要為大家整理了一些常用的方法,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-11-11
  • Vue腳手架編寫(xiě)試卷頁(yè)面功能

    Vue腳手架編寫(xiě)試卷頁(yè)面功能

    腳手架是一種用于快速開(kāi)發(fā)Vue項(xiàng)目的系統(tǒng)架構(gòu),這篇文章主要介紹了Vue腳手架實(shí)現(xiàn)試卷頁(yè)面功能,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Vue中的errorHandler異常捕獲問(wèn)題

    Vue中的errorHandler異常捕獲問(wèn)題

    這篇文章主要介紹了Vue中的errorHandler異常捕獲問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 使用@tap.stop阻止事件繼續(xù)傳播

    使用@tap.stop阻止事件繼續(xù)傳播

    這篇文章主要介紹了使用@tap.stop阻止事件繼續(xù)傳播,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 前端token中4個(gè)存儲(chǔ)位置的優(yōu)缺點(diǎn)說(shuō)明

    前端token中4個(gè)存儲(chǔ)位置的優(yōu)缺點(diǎn)說(shuō)明

    這篇文章主要介紹了前端token中4個(gè)存儲(chǔ)位置的優(yōu)缺點(diǎn)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Vue.js最佳實(shí)踐(五招助你成為vuejs大師)

    Vue.js最佳實(shí)踐(五招助你成為vuejs大師)

    這篇文章主要介紹了Vue.js最佳實(shí)踐,本文主要面向?qū)ο笫怯幸欢╲ue.js 編輯經(jīng)驗(yàn)的開(kāi)發(fā)者,需要的朋友可以參考下
    2018-05-05
  • vue實(shí)現(xiàn)的網(wǎng)易云音樂(lè)在線播放和下載功能案例

    vue實(shí)現(xiàn)的網(wǎng)易云音樂(lè)在線播放和下載功能案例

    這篇文章主要介紹了vue實(shí)現(xiàn)的網(wǎng)易云音樂(lè)在線播放和下載功能,結(jié)合具體實(shí)例形式分析了網(wǎng)易云音樂(lè)相關(guān)接口調(diào)用與操作技巧,需要的朋友可以參考下
    2019-02-02

最新評(píng)論

方正县| 隆昌县| 镇坪县| 彭州市| 固阳县| 桓台县| 红河县| 三都| 论坛| 正宁县| 土默特左旗| 桓台县| 公安县| 文成县| 洪湖市| 海门市| 铅山县| 义马市| 洛阳市| 宁化县| 泽州县| 志丹县| 开阳县| 太康县| 景德镇市| 东平县| 岱山县| 南昌县| 隆尧县| 中卫市| 井冈山市| 彰化市| 洞口县| 吴忠市| 大石桥市| 永德县| 绍兴市| 尉氏县| 丹棱县| 黄山市| 凤台县|