Node+Mysql+Vue實現登陸註冊功能 - 入門(內含HTTPS環境)

寫在前面

不少前端小夥伴都嘗試着使用vue構建前端項目時,使用的數據都是假數據,可是註冊登陸功能很難使用假數據進行測試,這篇文章就手把手教你如何使用node作後端,mysql作數據庫實現登陸註冊功能。本文基於vue-cli入門(四)——vue-resource登陸註冊實現Vue+MySQL+Express小試牛刀進行拓展。javascript

Mysql配置

圖片描述
對於沒有接觸過數據庫的小夥伴,我推薦下載XAMPP
這個比較輕量級,簡單易用。具體步驟以下html

  1. 列表項目
  2. 建立數據庫
  3. 進入xampp - mysql - bin - mysql.exe
  4. 輸入如下命令:前端

    use test;
    create table user(  
    id int not null primary key auto_increment,  
    username varchar(100) not null,  
    password varchar(100) not null   
    )ENGINE=InnoDB DEFAULT CHARSET=utf8;
  5. 以後點擊xampp的Admin,你會發如今test下有個user表,這樣你就已經建好數據庫了

Node 文件

在根文件夾下新建一個server文件,
文件結構如圖vue

|-- build
|-- config
|-- node_modules
|-- server
  |-- api
    |-- userApi.js
  |-- db.js
  |-- index.js
  |-- sqlMap.js
|-- src
|-- static
|-- .babelrc
|-- .editorconfig
|-- .gitignore
|-- index.html
|-- package.json
|-- README.md

db.js----用來添加mysql配置和index.js----Express服務器入口文件都不須要更改
原代碼java

sqlMap.js----SQL語句映射文件,以供api邏輯調用node

var sqlMap = {
    user: {
        add: 'insert into user( username, password) values ( ?, ?)',
        select_name: 'SELECT * from user where username = ?',    //查詢 username
        select_password: 'SELECT * from user where password = ?'      //查詢 password
    }
}
module.exports = sqlMap;

api/userApi.js ---- 測試用api示例mysql

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.send('err')
    } else {
        //res.json(ret);
        res.send('ok')
    }
};
// 增長用戶接口
router.post('/addUser', (req, res) => {
    var sql_name = $sql.user.select_name
    var sql = $sql.user.add;
    var params = req.body;
    console.log(params);
    conn.query(sql_name,params.username,function(err,result) {
        if(err) {
            console.log(err)
        }
        if(result[0]===undefined) {
            conn.query(sql,[params.username,params.password], function(err, result) {
                if(err) {
                    console.log(err)
                }
                if(result) {
                    jsonWrite(res, result)
                }
            })
        }else {
            res.send('-1')    //當前註冊username與數據庫重複時,data返回-1
        }
    })
    
});

//查找用戶接口
router.post('/selectUser', (req,res) => {
    var sql_name = $sql.user.select_name;
    var sql_password = $sql.user.select_password;
    var params = req.body;
    conn.query(sql_name,params.username,function(err, result) {
        if(err) {
            console.log(err)
        }
        if(result[0]===undefined) {
            res.send('-1')    //查詢不出username,data返回-1
        }else {
            conn.query(sql_password,params.password, function(err, result) {
                if(err) {
                    console.log(err)
                }
                if(result[0]===undefined) {
                    res.send('0')    //username正確後,password錯誤,data返回 0
                }else {
                    jsonWrite(res, result);
                }
            })
        }
    })
});
module.exports = router;

註冊功能

Vue-cli login-vue註冊功能修改git

register(){
            if(this.newUsername == "" || this.newage == ""){
                alert("請輸入用戶名或密碼")
            }else{
                let data = {'username':this.newUsername,'age':this.newage}
                this.$http.post('/api/user/addUser',data).then((res)=>{
                    console.log(res)
                    /*接口的傳值是(-1,該用戶已存在)*/
                    if(res.data == -1) {
                        this.tishi = "該帳號已存在"
                        this.showTishi = true
                        this.username = ''
                        this.age = ''
                    }
                    else if(res.status == 200){
                        this.tishi = "註冊成功"
                        this.showTishi = true
                        this.username = ''
                        this.age = ''
                         /*註冊成功以後再跳回登陸頁*/
                        setTimeout(function(){
                            this.showRegister = false
                            this.showLogin = true
                            this.showTishi = false
                        }.bind(this),2000)
                    }
                })
            }
        }

其餘

設置代理與跨域

原代碼是正確的。
可是我本身就是代理不成功,google了一下也沒有解決辦法,
返回看評論能夠發現他們也同樣,可是若是你仔細讀評論,就能夠找到解決辦法:須要啓動express服務器github

2017/10/31補充:
使用第三方接口時,別人設置跨域限制時,須要利用 反向代理
推薦 npm http-proxy-middleware
在工做場景中,通常是 先後端分離,後端給接口完成註冊登陸功能
  1. 在server文件夾下shift+右鍵 ,選擇在此打開命令窗口
  2. 輸入 npm install -g nodemon 回車
  3. 下載完成後輸出 nodemon index
  4. 啓動服務器後,才能訪問

圖片描述

個人一個完整項目,歡迎Watch和start!

仿拉勾網移動端頁面
因此得坑都填完了,本文僅適用於前端沒有接觸後端的小夥伴。
當你讀到這裏的時候而且本身嘗試着作了以後,恭喜你已經入門全棧了。
最後,再次感謝海島心heyyuanyuanispeaksql

HTTPS

代碼庫更新:添加HTTPS環境支持
如何在5分鐘內讓HTTPS在本地開發環境中運行
具體代碼參見commit
⚠️若是不想搭建https環境請刪除指定commit代碼


參考

相關文章
相關標籤/搜索