最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

用node和express連接mysql實現(xiàn)登錄注冊的實現(xiàn)代碼

 更新時間:2017年07月05日 10:50:10   作者:傲嬌的黃同學  
本篇文章主要介紹了用node和express連接mysql實現(xiàn)登錄注冊的實現(xiàn)代碼,具有一定的參考價值,有興趣的可以了解一下

為了數(shù)據(jù)庫課設(shè),打算后臺用node搭建,前臺用vue搞個博客出來(因為前段時間在學?。?。本來node不想用框架,喜歡先打好基礎(chǔ)的,奈何3個星期要把他做完和應(yīng)付各種考試,所以最后還是用了express,大大簡化我的學習成本。

數(shù)據(jù)庫我選了比較“正式”的MySQL,代碼方面這個比MongoDB復雜一些。而且這是數(shù)據(jù)庫課設(shè),如果用mongodb老師肯定讓我掛了,因為沒有涉及到設(shè)置主鍵、外鍵等。

先在主入口js引入登錄注冊業(yè)務(wù)js和發(fā)起一個監(jiān)聽端口

var express = require('express');
var user = require('./controll/user'); 

var app = new express();

app.use(express.static('public')); //靜態(tài)資源的入口
app.use('/user',user);    //這樣寫是為了以后如果改變了請求路徑,也不用改邏輯js而是改這行的路徑即可

var server = app.listen(3000)

html

$("#signup").click(function(){
  $.ajax({
   url: "/user/signup",
   type: 'post',
   data: $("#formid").serialize(),
   success: function(data) {
    if(data.status == 99999) {
     alert("3秒后跳轉(zhuǎn)到首頁");
     setTimeout(function() {
      location.href='http://'+window.location.host+'/html/index.html';
     },3000)
    }else {
     alert('登錄名或密碼錯誤')
    }
   }
  })  
 })


 $("#register").click(function(){
  $.ajax({
   url: "/user/register",
   type: 'post',
   data: $("#formRegister").serialize(),
   success: function(data) {
    console.log(data);
    if(data.status == 99999) {
     alert("注冊成功")
    }else {
     alert("登錄名已經(jīng)有人用")
    }
   }
  })  
 })

user.js

var mysql = require('mysql');
var express = require('express');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var session = require('cookie-session');

function select(sql) {
 var promise = new Promise(function(resolve,reject) {
  var result = null;
  var mysql = require('mysql');
  var connection = mysql.createConnection({
   host: 'localhost',
   user: 'root',
   password: 'root'
  });

  connection.connect();
  connection.query("USE test");
  connection.query(sql, function (err, results, fields) { 
   if (err) { 
    console.log("err");
    reject(err); 
   }else {
    console.log("yes");
    if(results.length > 0) {
     resolve({status: 99999});
    }else {
     resolve({status: 00000});
    }   
   } 
   } 
  );
  connection.end(); 
 })

 return promise; 
}


var router = express.Router();
router.use(bodyParser.urlencoded({ extended: true }));
router.use(cookieParser())
router.use(session({
 secret: 'blog'
}))
router.use(function timeLog(req,res,next) {
 var _user = req.session.user;
 if(_user) {
  //router.locals.user = user;
 }
 next();
})

//登錄
router.post('/signup',function(req, res) {
 var _user = req.body.user;
 var name = _user.name;
 var password = _user.password;
 select('SELECT * FROM name WHERE name = "'+ name + '" AND password = "' + password + '";').then(function(data) {
  //session存user name和userid
  req.session.user = name;
  data.status > 50 ? data.url = '/html/index.html' : null;
  res.json(data);
  res.end();
  req.redirect("/");
 }).catch(function(err){})

})

//注冊
router.post('/register',function(req, res) {
 var _user = req.body.user;
 var name = _user.name;
 var password = _user.password;
 console.log(name+"  "+password)
 select('SELECT * FROM name WHERE name = "'+ name + '";')
  .then(function(data) {
   if(data.status == 99999) {
    console.log("已有此用戶名")
    res.json({status:00000});
    res.end();
   }else {
    select('INSERT INTO name(name,password) VALUES ("'+name+'", "'+password+'");')
    .then(function(data) { 
     res.json({status:99999});
     res.end();
    }).catch(function(err){})
   }   
  }).catch(function(err){

  })

});

//退出
router.get("/logout",function(req, res) {
 delete req.session.user;
 res.end();
})

//獲取session
router.get("/session",function(req, res) {
 console.log("user in session");
 console.log(req.session.user);
 res.json({user:req.session.user});
 res.end();
})

module.exports = router;

代碼很多,不一一解釋了,如果以后有空再補回。先說幾個點

  1. 我把連接數(shù)據(jù)庫的邏輯都包在了select方法里。因為最后要把查詢到的結(jié)果返回回去,所以就要return,但是??!查詢數(shù)據(jù)庫是異步操作??!所以直接在select函數(shù)的最后一行return是沒有效果的,所以就算return都要在查完后的那個回掉函數(shù),但是在回掉函數(shù)return 的話是不能return到select函數(shù)外的。解決方案就是es6的Promise。詳細的就自己學相關(guān)知識了。
  2. 拿到查詢后的結(jié)果,登錄與注冊要分清楚邏輯,什么時候是成功的什么情況是失敗的。注冊這里我掉坑了。因為名不能重復,所以要先查詢,如果能查到放回的是status=99999。剛開始我沒理解清楚Promise,以為查詢不成功就是走reject(err)其實并不是,查詢不成功返回的是[],執(zhí)行的還是resolve(),區(qū)分就只能看他返回來的status。
  3. 還有保存登錄狀態(tài),就是session,這里我也沒怎么弄懂。但是這一步可以放在router的中間件執(zhí)行,這樣每個經(jīng)過這個router就能執(zhí)行那一步了。如果存在req.session.user的時候,就把當前的locals.user賦值。
  4. 導致我注冊那里摔了很久還爬不上來除了沒理解清楚Promise外,還有mysql不能輸入中文。當時我沒有設(shè)utf8,所以一直報錯,走的是reject(err)。不只只把mysql的語言設(shè)置為utf8,還要注意navcicat新建屬性的時候的字符類型,不然字符沖突搞得不能插入語句成功。

最后來個展望未來。

文章頁我打算用jade渲染整個文章html再返回出來。因為文章嘛,要變的其實也不多,而且用vue的話,個人感覺像評論啊這種小組件用比較好,文章都是靜態(tài)的,所以先在后端渲染出來直接返回,還不用再請求一遍再渲染。

想了想進度了能力,除了增刪改查文章,我覺得我的博客也只能有查看和評論文章的功能,不知道vue哪里能用。。??赡芪乙策€沒很好的接觸和理解vue畢竟我才學到vur-router。應(yīng)該大的功能就是做一個簡潔版markdown吧

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Nodejs中crypto模塊的安全知識講解

    Nodejs中crypto模塊的安全知識講解

    本篇文章給大家詳細介紹了Nodejs中crypto模塊的安全知識的相關(guān)內(nèi)容,需要的朋友跟著小編一下學習參考下吧。
    2018-01-01
  • 通過實例了解Nodejs模塊系統(tǒng)及require機制

    通過實例了解Nodejs模塊系統(tǒng)及require機制

    這篇文章主要介紹了通過實例了解Nodejs模塊系統(tǒng)及require機制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Node.js的Web模板引擎ejs的入門使用教程

    Node.js的Web模板引擎ejs的入門使用教程

    ejs是Node世界的開源模板引擎中比較有人氣的一個,而且并不只是在Express框架中才可以使用,今天為大家?guī)鞱ode.js的Web模板引擎ejs的入門學習教程,其中側(cè)重于ejs的layout頁面布局放面
    2016-06-06
  • NodeJS 中Stream 的基本使用

    NodeJS 中Stream 的基本使用

    在 NodeJS 中,我們對文件的操作需要依賴核心模塊 fs , fs 中有很基本 API 可以幫助我們讀寫占用內(nèi)存較小的文件,這篇文章主要介紹了NodeJS 中Stream 的基本使用,需要的朋友可以參考下
    2018-07-07
  • Express中使用Swagger的實現(xiàn)示例

    Express中使用Swagger的實現(xiàn)示例

    swagger-express是一個規(guī)范和完整的框架實現(xiàn),本文主要介紹了Express中使用Swagger的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • nodejs項目windows下開機自啟動的方法

    nodejs項目windows下開機自啟動的方法

    今天小編就為大家分享一篇nodejs項目windows下開機自啟動的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • npm 更改默認全局路徑以及國內(nèi)鏡像的方法

    npm 更改默認全局路徑以及國內(nèi)鏡像的方法

    今天小編就為大家分享一篇npm 更改默認全局路徑以及國內(nèi)鏡像的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 詳解從Node.js的child_process模塊來學習父子進程之間的通信

    詳解從Node.js的child_process模塊來學習父子進程之間的通信

    這篇文章主要介紹了從Node.js的child_process模塊來學習父子進程之間的通信,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • NodeJS通過魔術(shù)封包喚醒局域網(wǎng)計算機實例

    NodeJS通過魔術(shù)封包喚醒局域網(wǎng)計算機實例

    這篇文章主要為大家介紹了NodeJS通過魔術(shù)封包喚醒局域網(wǎng)計算機代碼實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 如何用node優(yōu)雅地打印全鏈路日志

    如何用node優(yōu)雅地打印全鏈路日志

    這篇文章主要給大家介紹了關(guān)于如何用node優(yōu)雅地打印全鏈路日志的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-03-03

最新評論

海南省| 孟州市| 泰安市| 姜堰市| 樟树市| 莱西市| 乌苏市| 高州市| 邓州市| 腾冲县| 安龙县| 长宁县| 泌阳县| 亳州市| 广饶县| 潞城市| 大厂| 五常市| 唐海县| 来安县| 西平县| 舒城县| 黔西| 德庆县| 睢宁县| 囊谦县| 陇南市| 托克逊县| 邛崃市| 林口县| 志丹县| 淮滨县| 凉城县| 连州市| 威海市| 伊吾县| 盐城市| 峨眉山市| 南昌县| 河池市| 江源县|