VUE + Mysql 实现基于node服务的连接

1 篇文章 0 订阅
1 篇文章 0 订阅

目的: 已知node能直接运行js代码操作数据库,而vue可以使用node,从而正好可以进行一些简单的对数据库的一些操作,开发一个简简单单的小项目。

实现步骤:

1. 先建立vue项目作为准备(这里准备的是vue3项目,使用了ts,但用的比较简单)

vue create 项目名

 然后出现:

最好使用最下面的那种自定义的, 然后出现上图

通过上下键指定,然后空格键(space)选中,选中后就会有绿色的星号,,这里我将选中typescript,router,而vuex以及其他可根据自己的需求选择,如现在不选,以后也可以自己配置。

选择好后,enter键回车就行,

 下键选择3.x哦,,,最后回车

按照需求输入y/n,,,,最后回车,,,等待就好了。。 

2. 项目建好之后,调整建好的项目,可以将views下面的.vue文件删了(删了之后,App.vue,还有router中的index里面有路径的引用或调用,也最好删除),components中也一样的操作。然后,,自己在views文件夹中建立自己的.vue文件,建好之后,在router中配好路径,在App.vue中加上<router-view />。

如图所示:

Index.vue中随便加点东西就好。

router/index.ts:

import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
import Index from '@/views/Index.vue';

const routes: Array<RouteRecordRaw> = [
  {
    path: '/',
    name: 'Index',
    component: Index
  }
]

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})

export default router

 当初新建项目的时候,选择了Router这个东西的话,就会有默认的模板,依葫芦画瓢就好了。

注意path要在运行的url中体现哦!!!

3. 新建文件夹server:

 如上图所示:(暂时可以不用管api文件夹中的userApi.ts)

|-- server

        |-- api  

                |-- userApi.ts

        |-- db.ts

        |-- index.ts

        |-- sqlMap.ts

建好之后,,db.ts先写,因为里面存放的是自己的sql配置(我用的是mysql 8.0,,用的是自带的mysql workBench),如下图为mysql可视界面(随便建的一个)

 

db.ts:

module.exports = {
    mysql: {
        host: 'localhost',//mysql连接ip地址
        user: 'root', // 一般就是root,根据情况而定
        password: '***',//mySql用户名密码,填自己的密码
        database: '***',//mySql数据库名,填自己的数据库名
        port: '3306'//mysql连接端口
    }
}

sqlMap.ts: 

var sqlMap = {
    // 用户注册
    register: 'insert into users(username,password,address) values(?,?,?)',
    
}

module.exports = sqlMap;

sqlMap.ts是用来写sql语句的,到时可以在api中的userApi.ts可以接收到exports的sqlMap,。。。这个可以不要,,,到时需在api中的userApi.ts写。。。。

server/index.ts:

// node 后端服务器
const userApi = require('./api/userApi');
const fs = require('fs');
const path = require('path');
const bodyParser = require('body-parser');
const express = require('express');
const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));


// 后端api路由
app.use('/users', userApi)

// 监听端口
app.listen(5000);

console.log('success listen at port:5000......');

上图可见(暂时未写userApi的话,就先注释掉相关语句),需要安装几个东西:

npm install body-parser -S
npm install express -S

4. 测试连接

因为使用的是ts文件,而ts是要先转化为js后,node才能识别,所以,再用npm install ts-node -S 安装ts-node,,可以直接运行ts文件了。。。。。

在server文件夹下 打开终端,输入 ts-node index 这个命令,如下图:

出现下面这个,就证明运行成功:

 

 

但这只是测试。。。。

5. node服务与vue项目同时启动:

已知node服务启动:  ts-node index

已知vue项目启动: npm run dev/serve(这个要看package.json中的scripts配置)

结合方法: 使用concurrently

npm install concurrently -S

然后修改package.json配置的scripts,,如下:

"scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },
"scripts": {
    "serve": "concurrently \"ts-node ./src/server/index\"  \"vue-cli-service serve\"",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },

我这里的serve改动了,  改动变化如上,,

运行结果:

 

注意,,,

(1).'\'后面不要加空格,其目的是为了给后面的引号转义;

(2).由于package.json文件运行serve的index,所以使用相对路径./src/server/index去找到index.ts文件去运行

(3).运行命令依然是npm run serve ,运行时会出现很多运行进程,导致无法看清是否监听着5000这个端口,所以,,

如上图测试一下吧,, 不过,,,更推荐使用步骤四去测试连接,,,因为可能会在控制台报错,开发也能知道是什么错,进行改正。

6. 搞了这么多,,, server下面的api文件夹的userApi可以开始写了(也可以提前写,看心情)

 

const models = require('../db')
const Express = require('express')
const router = Express.Router()
const mysql = require('mysql')
const $sql = require('../sqlMap')

// 连接数据库
const conn = mysql.createConnection(models.mysql)

conn.connect();

router.post('/addUser', (req:Record<string,any>, res:any) => {
    const sql = $sql.register;
    const params = req.body;
    console.log(params);
    console.log(req.body);
    
    conn.query(sql, [params.username, params.password, params.address?params.address:''], function(err:any, result:any) {
      if (err) {
        console.log(err);
      }
      if (result) {
          console.log(result);
      }
    })
})
 

module.exports = router

如上图: 引入db.ts,express,mysql,以及sqlMap

注意注意: 记得npm install mysql express -S 哦,,,还有,,export哦!!

写好了这个userApi之后,,,之前的index.ts中注释掉的userApi就可以放开了。

 

7. 准备axios

(1).axios拦截器:

新建utils文件夹,下面再建 request.ts:

import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';

export class Request{
    public static axiosInstance: AxiosInstance;

    public static init ():any {
        // 创建axios实例
        this.axiosInstance = axios.create({
            baseURL: '', // 这里加/api也行,到时访问就不加了,看自己心情
            timeout: 6000
        });
        
        // 初始化拦截器
        this.initInterceptors();
        return axios;
    }

    // 初始化拦截器
    public static initInterceptors():void {
        /**
         * 请求拦截器
         * 
         */
        this.axiosInstance.interceptors.request.use(
            

        );
 
 
        // 响应拦截器
        this.axiosInstance.interceptors.response.use(
            // 请求成功
            (response: AxiosResponse) => {

            
                if (response.status === 200) {
                    // return Promise.resolve(response.data);
                    return response;
                } else {
                    return response;
                }
            },
            // 请求失败
            (error: any) => {
                const {response} = error;
                if (response) {
                    return Promise.reject(response.data);
                }
        });
    }
}

在main.ts中引入并挂载

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import ElementUI from 'element-plus'
import 'element-plus/dist/index.css'

import {Request} from '@/utils/request'
import Axios from 'vue-axios';

const app = createApp(App)

app.config.globalProperties.$axios = Request;

app.use(store).use(router).use(ElementUI).use(Axios,Request.init()).mount('#app')

 (这里我引入了elementUI,如不引的话,下面就别use了)最主要的就是Axios,{Request},Request.init(),这几部分内容了。

8. 使用axios访问node服务:

在最最开始的时候,在views下新建了Index.vue文件中:

<template>
  <div>
      111
  </div>
</template>

<script lang="ts">
import { defineComponent, getCurrentInstance, onMounted } from "@vue/runtime-core";

export default defineComponent({
  setup(){
    const {proxy} = getCurrentInstance() as any;
    onMounted(()=>{
      proxy.$axios.axiosInstance.post('/api/users/addUser',{
        username: '111',
        password: '123',
        address: '135',
      }).then((res:any)=>{
        console.log(res);
        
      })
    })
  }
})
</script>

<style>

</style>

主要注重于onMounted()中的东西就好了,使用的接口是'/api/users/addUser' ,,注意,,接口的/api可以在request.ts中的 baseUrl 中写,这里可以不用加这个/api,如没写,,这里请加上。。

为什么要加/api???

 9. 配置好了node服务的接口了,就可以加上vue.config.js了(回答为什么要加/api):

 回答: 为了走代理。

module.exports = {
    // publicPath: '/dist',  //资源打包路径
    devServer: {
      host: "0.0.0.0",
      https: false,
      open: true, //配置自动启动浏览器
      proxy: {
        '/api': {
            target: 'http://localhost:5000/',
            changeOrigin: true,
            ws: true,
            pathRewrite: {
                '/api': ''
            }
        },
      }
    },
}
  

确保端口号哦!!!

理清思路: 

已知: Index.vue中: post("/api/users/addUser”);

已知: vue.config.js中: '/api'

已知: server/index.ts 中 : app.use('/users',userApi);

过程是这样的:

npm run serve启动项目:

运行Index.vue文件后发出的请求为 http://localhost:8080/api/users/addUser,请求会走vue.config.js中的proxy代理,就会遇到'/api',识别到请求中的/api 就会将整个请求的地址转变到http://localhost:5000中去,并且,/api会被替换为'',请求在这两个条件下变为了http://localhost:5000/users/addUser,由于在启动的时候就在监听5000这个端口,所以,就会走server中的内容了,由于,,/users作为路劲的开始,就会去寻找/users后面的/addUser,再由于/addUser在userApi中已经暴露了,所以/user/addUser就会定位到userApi中,执行相关的操作数据库的代码。(以上为个人理解)

测试结果:

 

 参考: https://blog.csdn.net/weixin_42003850/article/details/100511566

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue+Node+MySQL是一种常见的前后端开发组合。Vue是一种流行的JavaScript框架,用于构建用户界面。Node是一个基于Chrome V8引擎的JavaScript运行时环境,用于构建服务器端应用程序。MySQL是一种关系型数据库管理系统,用于存储和管理数据。 在这个组合中,Vue通常用于构建前端界面,包括用户界面和交互逻辑。Node用于构建后端服务器,处理前端发送的请求,并与数据库进行交互。MySQL用于存储和管理数据。 在你提供的引用中,\[1\]是一个Node服务器端的代码示例,用于处理添加用户的请求,并将用户信息插入到数据库中。\[2\]是一个MySQL连接示例,用于连接到数据库并暴露连接对象供接口操作数据库时使用。\[3\]提供了一个简单的目录结构示例,展示了如何在Node工程中进行数据库操作。 综上所述,Vue+Node+MySQL是一种常见的前后端开发组合,用于构建Web应用程序。Vue负责前端界面,Node负责后端服务器,MySQL负责数据存储和管理。通过这种组合,可以实现前后端的数据交互和处理。 #### 引用[.reference_title] - *1* [vue+node+mysql项目开发(包括部署到服务器)](https://blog.csdn.net/juvialoxer/article/details/114012421)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [vue+node+mysql+nginx+express完成云服务器前后端分离搭建](https://blog.csdn.net/weixin_43480867/article/details/103255855)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

被高端技术封印的小柯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值