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;

作者:wangxiaoda

链接:http://www.jianshu.com/p/6b2bf63bb00e

來源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容