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

vue項目使用node連接數(shù)據(jù)庫的方法(前后端分離)

 更新時間:2022年12月22日 14:50:54   作者:不可名狀邵雅虎  
這篇文章主要介紹了vue項目使用node連接數(shù)據(jù)庫(前后端分離),本文結合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

學習關鍵語句:
vue連接mysql數(shù)據(jù)庫
vue項目連接后臺數(shù)據(jù)庫配置
vue通過node連接MySQL數(shù)據(jù)庫

寫在前面

為了快速學習nodejs制作后端并和數(shù)據(jù)庫進行交互的方法,所以趕緊寫一篇這樣的文章出來,如果你對這篇文章中提到的內(nèi)容有所疑惑,請飛快的將你的疑惑輸入到下方評論區(qū)中!
另外一個真實原因是我在做這個練習時很難找到完整的教學性文章 , 所以決定分享一下經(jīng)驗

注意:本文在2022/8/16號已進行完善,此次完善的內(nèi)容如下

  • 變?yōu)楦险鎸嶍椖康哪夸浗Y構
  • axios請求二次封裝
  • 前端跨域處理完善

文章末尾附帶本文項目文件鏈接

對于搜索自己問題找到這篇文章的網(wǎng)友,可以參考右邊的菜單目錄快速定位到你可能想找的內(nèi)容

編寫順序

  • 編寫前端頁面
  • 編寫后端node服務器
  • 編寫node連接數(shù)據(jù)庫
  • 編寫數(shù)據(jù)庫交互
  • 編寫前后端交互

開始

1.編寫前端頁面

這里使用vue2腳手架快速搭建項目

vue create node-app

選擇 babel, router即可
建立好之后如下圖

在這里插入圖片描述

刪除無需內(nèi)容

APP.vue
只保留路由切換

在這里插入圖片描述

Home.vue 和 About.vue 全部清空,重新建立vue文件模板(template + script + style)

制作登錄頁和首頁

將 Home.vue 當做登錄頁面, About.vue當做首頁,這樣就不用麻煩配置路由了,當做演示就很方便

登錄頁

登錄頁的功能需求 : 輸入賬號密碼完成登錄操作,并根據(jù)登錄情況給出響應提示
制作登錄頁面, 放置兩個 input 輸入框和一個 button 按鈕,并給上最基本的樣式

Home.vue

<template>
  <div class="home">
    用戶名 <input type="text" v-model="form.username" /><br />
    秘密碼 <input type="password" v-model="form.password" /><br />
    <button @click="login">登錄</button>
  </div>
</template>
<script>
export default {
  name: 'Home',
  data() {
    return {
      form: {
        username: '',
        password: ''
      }
    }
  },
  methods: {
    login() {

    }
  }
}
</script>
<style>
* {
  margin: 5px;
  padding: 5px;
}
button {
  width: 50px;
  height: 30px;
}
</style>

在這里插入圖片描述

首頁

首頁就用來修改密碼好了, 修改保存在數(shù)據(jù)庫中的密碼
首頁功能需求 : 修改用戶密碼 , 查看用戶個人信息

About.vue

<template>
  <div style="display:flex">
    <div>
      用戶名:<input type='text' v-model='form.username' /><br />
      新密碼:<input type='text' v-model='form.newPassword' /><br />
      新密碼:<input type='text' v-model='form.rePassword' /><br />
      <button @click='update'>確認</button>
      <button @click='getUser'>查詢</button>
    </div>
    <div class="div2" v-if="userInfo.nickname">
      <h3>用戶信息</h3>
      <div>
        昵稱:{{userInfo.nickname}}
      </div>
      <div v-if="userInfo.gender != '無'">
        性別:{{userInfo.gender}}
      </div>
      <div v-if="userInfo.age != ''">
        年齡:{{userInfo.age}}
      </div>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      form: {
        username: '',
        newPassword: '',
        rePassword: ''
      },
      userInfo: {}
    }
  },
  methods: {
    getUser() {

    },
    update() {
     	
    }
  }
}
</script>
<style>
</style>

由于個人信息一開始時隱藏的所以我們看不到

到這里,前端頁面除了交互以外就已經(jīng)完成了
接下來我們來編寫后端 node服務器

2.制作后端 node 服務器

初始化項目

新建文件夾, 起名為 node-server , 新建文件 app.js , 在終端中初始化項目

npm init
npm i

完成之后 node-server 文件夾中會出現(xiàn)以下目錄

在這里插入圖片描述

編寫 app.js

我們想要制作服務器, 這里使用 express 來實現(xiàn)

npm i --save express

當然了, 我們還需要解決跨域問題, 這里使用 cors 來解決

npm i --save cors

現(xiàn)在我們來考慮前端傳參問題
對于get請求,其參數(shù)是直接拼接在url后面的,解析也相對容易。在express框架中,get請求的參數(shù)全部都被放置在了request對象的query中。
post請求有多種形式可以發(fā)送數(shù)據(jù),這取決于post請求的請求頭Content-type的內(nèi)容,常見的有三種:

  • multipart/form-data
  • application/x-www-form-urlencoded
  • application/json

為此,我們引入中間件來解決讀取參數(shù)的問題
這里使用 body-parser 和 connect-multiparty 來解決

npm i --save body-parser
npm i --save connect-multiparty

接下來編寫 app.js 文件

app.js

// 導入 express
const express = require('express')
// 創(chuàng)建 app
const app = express()
// 設置跨域訪問
const cors = require('cors')
app.use(cors())
// 處理POST參數(shù)
const bodyParser = require('body-parser')
const multiparty = require('connect-multiparty')
// 處理 x-www-form-urlencoded
app.use(bodyParser.urlencoded({
  extended:true
}));
// 處理 application/json
app.use(bodyParser.json())
// 處理 mutipart/form-data
app.use(multiparty())
// 測試接口能否正常調(diào)用
app.get('/info', (req, res) => {
  res.send("Hello shaoyahu !")
})
// 啟動
app.listen(3000, () => {
  console.log('express server running at http://127.0.0.1:' + 3000);
})

接下來我們在控制臺使用 node 命令就可以啟動服務器了

node app.js

最先看到控制臺打印了消息

在這里插入圖片描述

接下來我們在瀏覽器中打開看一看效果

在這里插入圖片描述

太棒了 ! 我們已經(jīng)完成了最簡單的接口

3.編寫 node 連接數(shù)據(jù)庫

編寫 mysql.js 文件

我們在 node-server 文件夾下新建文件 mysql.js
首先, 我們需要安裝 mysql

本機安裝
本機安裝 mysql 服務請參考其他文章 , 這里不做詳細介紹 , 大致行動為 : 下載安裝包 , 點擊安裝 , 配置

安裝 mysql 依賴

npm i --save mysql

編寫 mysql.js 文件

mysql.js

let mysql = require('mysql')
const db_config = {
  host: 'localhost',
  user: '請輸入你自己的賬號, 一般為 root',
  password: '請輸入你自己的密碼, 一般也為 root',
  port: "3306",// 默認使用3306端口號
  database: 'node_app'// 使用你自己創(chuàng)建的數(shù)據(jù)庫名稱,我這里使用 node_app
}
// 進行數(shù)據(jù)庫交互
function conMysql(sql) {
  let connect = mysql.createConnection(db_config)
  // 開始鏈接數(shù)據(jù)庫
  connect.connect(function (err) {
    if (err) {
      console.log(`mysql連接失敗: ${err}!`)
    } else {
      console.log('mysql連接成功!')
    }
  })
  // 返回一個Promise承諾對象
  return new Promise((resolve, reject) => {
    connect.query(sql, (err, result) => {
      if (err) {
        reject(err)
      } else {
        // 此處需要將返回數(shù)據(jù)轉(zhuǎn)為JSON再轉(zhuǎn)回來,否則原數(shù)據(jù)不為任何數(shù)據(jù)類型
        let res = JSON.parse(JSON.stringify(result))
        closeMysql(connect)
        resolve(res)
      }
    });
  })
}
// 查詢成功后關閉mysql
function closeMysql(connect) {
  connect.end((err) => {
    if (err) {
      console.log(`mysql關閉失敗:${err}!`)
    } else {
      console.log('mysql關閉成功!')
    }
  })
}
// 導出方法
exports.conMysql = conMysql

測試數(shù)據(jù)庫連接

我們在數(shù)據(jù)庫中新建一張表 userinfo , 里面提前插入兩條數(shù)據(jù)

在這里插入圖片描述

繼續(xù)編寫 app.js 文件獲取這兩條數(shù)據(jù)

app.js
在原有的基礎上新增一個接口 , 位置放在 /info 下就可以

// 引入 mysql 方法
let { conMysql } = require('./mysql')
// 獲取全部用戶信息,測試數(shù)據(jù)庫連接的上不上
app.get('/getUser', (req, res) => {
  let sql = 'select * from userinfo'
  conMysql(sql).then(result => {
    res.send(result)
  })
})

同樣我們在瀏覽器中打開

在這里插入圖片描述

測試成功 !

4.實現(xiàn)登錄、修改密碼和獲取用戶信息接口

接下來就是最重要的部分了 , 我們來實現(xiàn)登錄、修改密碼和獲取用戶信息的接口 , 同樣的里面還包含了數(shù)據(jù)庫的交互
但是 , 在此之前 , 我們先來統(tǒng)一返回的數(shù)據(jù)格式

app.js
我們創(chuàng)建一個類來返回數(shù)據(jù)

// 創(chuàng)建統(tǒng)一的返回報文對象
class Response {
  constructor(isSucceed, msg, code, data) {
    this.isSucceed = isSucceed;
    this.msg = msg;
    this.code = code;
    this.data = data;
  }
}

登錄

app.js
登錄方法我們使用 post 請求,想來沒人希望自己的賬號密碼被人一眼看見吧

// 登錄
app.post('/login', (req, res) => {
  let sql = `select * from userinfo where username = '${req.body.username}'`
  conMysql(sql).then(result => {
    if (result[0].password === req.body.password) {
      let response = new Response(true, '登錄成功', 200, result)
      res.send(response)
    } else {
      let response = new Response(false, '用戶名或密碼錯誤', 400)
      res.status(400).send(response)
    }
  }).catch(err => {
    res.status(500).send('數(shù)據(jù)庫連接出錯!')
  })
})

其中 , res.send() 方法默認返回狀態(tài)碼為 200 , 可以通過增加調(diào)用 .status() 方法返回想要返回的狀態(tài)碼

修改密碼

app.js
修改密碼我們使用 post 請求

// 修改密碼
app.post('/updatePassword', (req, res) => {
  let sql = `update userinfo set password = '${req.body.newPassword}' where username = '${req.body.username}'`
  conMysql(sql).then(result => {
    if (result.affectedRows == 1) {
      let response = new Response(true, '修改成功', 200, result)
      res.send(response)
    } else {
      let response = new Response(false, '修改失敗,請稍后重試', 400)
      res.status(400).send(response)
    }
  }).catch(err => {
    res.status(500).send('數(shù)據(jù)庫連接出錯!')
  })
})

獲取用戶個人信息

app.js
獲取用戶個人信息我們使用 get 請求

// 獲取當前用戶信息
app.get('/getUserInfo', (req, res) => {
  let sql = `select * from userinfo where username = '${req.query.username}'`
  conMysql(sql).then(result => {
    let response = new Response(true, '獲取成功', 200, result)
    res.send(response)
  }).catch(err => {
    res.status(500).send('數(shù)據(jù)庫連接出錯!')
  })
})

這樣一來 , 我們登錄、修改密碼和獲取個人信息都已經(jīng)完成了 , 接下來只需要完成前后端交互就可以了 , 很顯然的是 , 接下來的事應該是由前端開發(fā)來完成了 , 所有如果有哪位有意向于前端開發(fā)的朋友閱讀到這里 , 就可以嘗試自己動手完成接下來的工作了

5.完成前后端交互

前后端交互我們使用 axios
安裝依賴

$ npm i --save axios

二次封裝axios和請求

在src同級目錄下新建文件 axios.js

在這里插入圖片描述

打開axios.js文件,我們進行簡單封裝

axios.js
進行簡單的封裝,不添加攔截器

為了簡潔,同時相同請求地址的域名都是相同的,我們就可以將域名提出來統(tǒng)一放在最前面

const axios = require('axios')

const service = axios.create({
  baseURL: 'http://localhost:3000'
})

export default service

接下來進行請求的封裝
在src目錄下新建 api 文件夾同時在該文件夾下新增文件 user.js 專門存放和用戶有關的接口請求

在這里插入圖片描述

我們在 user.js 中封裝三個方法,分別是登錄,修改密碼和查看個人信息

user.js

import axios from '../../axios'

// 用戶登錄
export function userLogin(data) {
  return axios.post(`/login`, data)
}

// 修改密碼
export function updatePassword(data) {
  return axios.post('/updatePassword', data)
}

// 獲取用戶信息
export function getUserInfo(username){
  return axios.get('/getUserInfo?username=' + username)
}

當然了,前端也是會遇到跨域問題的,我們這里使用代理服務器來解決跨域問題
在src同級目錄下新增 vue.config.js 文件

vue.config.js

module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: 'http://localhost:3000',
        changeOrigin: true,
        pathRewrite: { '^/api': '' }
      },
    },
  }
}

由于我們將所有的 /api 都使用域名進行重寫
所以我們再來修改 axios.js 文件

axios.js

const axios = require('axios')

const service = axios.create({
  baseURL: '/api'
})

export default service

好了這樣一來我們和發(fā)送請求相關的文件便寫好了,現(xiàn)在要去寫交互頁面了

添加登錄功能

Home.vue
首先需要引入請求方法

import { userLogin } from '../api/user'

再只需要對上面的 login 方法進行補充就可以了

    login() {
      userLogin(this.form)
        .then((res) => {
          alert(res.data.msg)
          this.$router.push('about')
        })
        .catch((err) => {
          alert(err.response.data.msg)
        })
    }

這樣就可以完成登錄功能了 , 接下來我們來處理修改密碼

添加修改密碼功能

About.vue
首先需要引入請求方法

import { updatePassword, getUserInfo } from '../api/user'

再只需要對上面的 update 和 getUser 方法進行補充就可以了

    getUser() {
      getUserInfo(this.form.username).then(res => {
        this.userInfo = res.data.data[0]
      }).catch((err) => {
        console.log(err)
      })
    },
    update() {
      if (
        this.form.username == '' ||
        this.form.newPassword == '' ||
        this.form.rePassword == ''
      ) {
        alert('數(shù)據(jù)不能為空')
        return
      }
      updatePassword(this.form)
        .then((res) => {
          alert(res.data.msg)
          this.$router.push('/')
          alert('修改密碼后請重新登錄')
        })
        .catch((err) => {
          alert(err.response.data.msg)
        })
    }

結束

如此一來 , 一個簡單的前后端分離的項目就是有了雛形 , 雖然實現(xiàn)的功能非常簡陋 , 但能讓我在 js 這條路上再進一步 , 就是說非常高興了

如果你對文中的內(nèi)容有所疑惑或者覺得不對勁 , 請趕快到評論區(qū)給我留言 , 千萬別耽誤了

文件鏈接

最后附上文件鏈接: https://dyyidc.jb51.net/202212/yuanma/vue_node_270703_jb51.rar

到此這篇關于vue項目使用node連接數(shù)據(jù)庫(前后端分離)的文章就介紹到這了,更多相關vue使用node連接數(shù)據(jù)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vue使用keep-alive實現(xiàn)組件切換時保存原組件數(shù)據(jù)方法

    vue使用keep-alive實現(xiàn)組件切換時保存原組件數(shù)據(jù)方法

    這篇文章主要介紹了vue使用keep-alive實現(xiàn)組件切換時保存原組件數(shù)據(jù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 前端vue3打印功能實現(xiàn)(多頁打印、不使用插件)

    前端vue3打印功能實現(xiàn)(多頁打印、不使用插件)

    在Vue項目中實現(xiàn)打印功能是前端開發(fā)中常見需求之一,這篇文章主要介紹了前端vue3打印功能實現(xiàn)的全部過程,文中介紹的方法實現(xiàn)了多頁打印并且不使用插件,需要的朋友可以參考下
    2024-09-09
  • vue和thymeleaf相結合的注意事項詳解

    vue和thymeleaf相結合的注意事項詳解

    這篇文章主要介紹了vue和thymeleaf相結合的注意事項詳解,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • vue.js樹形組件之刪除雙擊增加分支實例代碼

    vue.js樹形組件之刪除雙擊增加分支實例代碼

    本文通過實例代碼給大家講解vue.js樹形組件之刪除雙擊增加分支功能,非常不錯,具有參考借鑒價值,需要的的朋友參考下
    2017-02-02
  • 使用vite項目打包資源分配目錄

    使用vite項目打包資源分配目錄

    這篇文章主要介紹了使用vite項目打包資源分配目錄方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • vue使用recorder.js實現(xiàn)錄音功能

    vue使用recorder.js實現(xiàn)錄音功能

    這篇文章主要為大家詳細介紹了vue使用recorder.js實現(xiàn)錄音功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Vue?cli及Vue?router實例詳解

    Vue?cli及Vue?router實例詳解

    vue-cli是vue官方出品的快速構建單頁應用的腳手架,里面集成了webpack,npm,nodejs,babel,vue,vue-router,這篇文章主要介紹了Vue?cli及Vue?router詳解,需要的朋友可以參考下
    2022-08-08
  • Vue3中如何使用rem來控制字體大小問題

    Vue3中如何使用rem來控制字體大小問題

    這篇文章主要介紹了Vue3中如何使用rem來控制字體大小問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • vue自定義彈框效果(確認框、提示框)

    vue自定義彈框效果(確認框、提示框)

    這篇文章主要為大家詳細介紹了vue自定義彈框,實現(xiàn)確認框、提示框效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 如何用命令窗口的方式創(chuàng)建Vue項目

    如何用命令窗口的方式創(chuàng)建Vue項目

    這篇文章主要介紹了如何用命令窗口的方式創(chuàng)建Vue項目過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評論