用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;