Vue+MySQL+Express vue鏈接數據庫

用vue-cli腳手架工具創建一個基於webpack的Vue項目

安裝node

node官網地址:https://nodejs.org/en/

直接選擇對應的版本安裝就可以了。

查看是否安裝成功

node -v

npm -v

cnpm -v

安裝cnpm

使用npm安裝依賴模塊可能會很慢,建議換成[cnpm]

npm install -g cnpm --registry=http://registry.npm.taobao.org

安裝vue-cli腳手架工具

sudo npm install -g vue-cli

創建一個項目文件夾,進入項目目錄執行:

vue init webpack my-project

生成my-project項目目錄

Paste_Image.png

安裝vue-resource依賴

一種安裝方式先在 package.json 中對應地方添加,然後執行npm install

"dependencies": {

"vue": "^2.1.10",

"vue-router": "^2.2.0",

"vue-resource": "^1.0.3"

},

安裝完成後執行,安裝依賴(cnpm install 速度比npm快)

npm install

執行如下,進行開發時調試

npm run dev

npm的常用命令

npm -v          #顯示版本,檢查npm 是否正確安裝。

npm install express  #安裝express模塊

npm install -g express  #全局安裝express模塊

npm list        #列出已安裝模塊

npm show express    #顯示模塊詳情

npm update        #升級當前目錄下的項目的所有模塊

npm update express    #升級當前目錄下的項目的指定模塊

npm update -g express  #升級全局安裝的express模塊

npm uninstall express  #刪除指定的模塊

添加 Express 服務端目錄

在項目根文件夾下創建一個 server 文件夾。然後裏面創建下面三個文件;

和api目錄,api裏面建一個文件

db.js——用來添加 mysql 配置

根據mysql的IP,端口,用戶名,密碼,數據庫名稱自行修改

代碼如下:

// 數據庫連接配置

module.exports = {

mysql: {

host: 'localhost',

user: 'root',

password: '',

database: 'wxd',

port: '3307'

}

}

index.js——Express 服務器入口文件

// 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('/api/user', userApi);

// 監聽端口

app.listen(3000);

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

sqlMap.js——SQL 語句映射文件,供 API 調用

// sql語句

var sqlMap = {

// 用戶

user: {

add: 'insert into user(id, name, age) values (0, ?, ?)'

}

}

module.exports = sqlMap;

api/userApi.js —— 測試用 API 示例

var models = require('../db');

var express = require('express');

var router = express.Router();

var mysql = require('mysql');

var $sql = require('../sqlMap');

// 連接數據庫

var conn = mysql.createConnection(models.mysql);

conn.connect();

var jsonWrite = function(res, ret) {

if(typeof ret === 'undefined') {

res.json({

code: '1',

msg: '操作失敗'

});

} else {

res.json(ret);

}

};

// 增加用戶接口

router.post('/addUser', (req, res) => {

var sql = $sql.user.add;

var params = req.body;

console.log(params);

conn.query(sql, [params.username, params.age], function(err, result) {

if (err) {

console.log(err);

}

if (result) {

jsonWrite(res, result);

}

})

});

module.exports = router;

在項目根目錄下安裝依賴

npm install express mysql body-parser

此時在 server 文件夾下執行node index(這裏也可以加載package.json中,然後使用 npm 執行)看到 success listen at port:3000……即服務端啓動成功。

編寫 vue

Hello.vue

{{ msg }}

提交

export default {

name: 'hello',

data () {

return {

msg: 'Welcome to Your Vue.js App',

userName: '',

age: ''

}

},

methods: {

addUser() {

var name = this.userName;

var age = this.age;

this.$http.post('/api/user/addUser', {

username: name,

age: age

},{}).then((response) => {

console.log(response);

})

}

}

}

這裏注意,如果沒有引用vue-resource,this.$http.post是不生效的,還會報錯

報錯信息:

Uncaught TypeError: Cannot read property 'post' of undefined

解決方案:在main.js中引入vue-resource

// The Vue build version to load with the `import` command

// (runtime-only or standalone) has been set in webpack.base.conf with an alias.

import Vue from 'vue'

import App from './App'

import router from './router'

import VueRouter from 'vue-router'

import VueResource from 'vue-resource'

/* eslint-disable no-new */

new Vue({

el: '#app',

router,

template: '',

components: { App }

})

// 此處需要use後,this.$http.get或者this.$http.post纔可以

Vue.use(VueRouter)

Vue.use(VueResource)

整個項目結構:

Paste_Image.png

這時候項目已經基本完成,執行cnpm install命令安裝依賴

cnpm install

執行如下命令,進行開發調試

npm run dev

調試過程中出現問題,可以重新編譯代碼

npm run build

這裏,如果執行npm run dev後,報eslint的錯誤,可以在build目錄的webpack.base.conf.js文件中,把eslint的代碼註釋掉,重新執行npm run dev就不會報錯了:

ESLint是一個QA工具,用來避免低級錯誤和統一代碼的風格。ESLint被設計爲完全可配置的,主要有兩種方式來配置ESLint:

在註釋中配置:使用JavaScript註釋直接把配置嵌入到文件中。

配置文件:使用一個JSON或YAML文件來爲全部的目錄和它的子目錄指定配置信息。

註釋的代碼如下:

// 去掉eslint驗證,註釋掉下面的代碼

// {

//  test: /\.(js|vue)$/,

//  loader: 'eslint-loader',

//  enforce: "pre",

//  include: [resolve('src'), resolve('test')],

//  options: {

//    formatter: require('eslint-friendly-formatter')

//  }

// },

執行npm run dev,打開一個頁面,然後輸入一組數據,點擊保存,你會發現會報一個錯誤:

vue-resource.common.js?e289:1071 POST http://localhost:8080/api/user/addUser 404 (Not Found).

這是由於直接訪問8080端口,是訪問不到的,這裏需要設置一下代理轉發。

設置代理與跨域

vue-cli 的 config 目錄的index.js文件中有一個proxyTable參數,用來設置地址映射表,可以添加到開發時配置(dev)中

dev: {

env: require('./dev.env'),

port: 8080,

autoOpenBrowser: true,

assetsSubDirectory: 'static',

assetsPublicPath: '/',

proxyTable: {

'/api': {

target: 'http://localhost:3000/api/',

changeOrigin: true,

pathRewrite: {

'^/api': ''

}

}

},

cssSourceMap: false

}

}

即請求/api時就代表‘http://localhost:3000/api/’,

changeOrigin參數接收一個布爾值,如果爲true,這樣就不會有跨域問題了。

經過如上一系列操作後,打開頁面輸入用戶名,年齡,直接點擊提交。數據入庫。~搞定!效果如下:

Paste_Image.png

最後,奉上數據庫user表建表語句:

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (

`id` varchar(50) NOT NULL,

`name` varchar(255) DEFAULT NULL,

`age` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章