原文連接
準(zhǔn)備
在開始做這個前,希望你已經(jīng)配置好的Node,express和MySQL的開發(fā)環(huán)境。也可以參考參考文章
開發(fā)環(huán)境的配置
新建項目 參考Mac下express的安裝和新建項目 mysql模塊 在package.json文件的dependencies下加入下面的代碼"mysql": "latest", 最終的效果: 然后cd到項目所在的目錄,在終端中執(zhí)行npm install,項目就會配置mysql模塊。 新建數(shù)據(jù)庫配置文件 在項目目錄下新建一個db目錄,在目錄項新建兩個文件DBConfig.js和usersql.js 效果如下: 其中的DBConfig.js是數(shù)據(jù)庫的配置文件,只要代碼如下:
module.exports =
{ mysql: { user:
'root' ,password:
'123456' ,database:
'userinfo' }
};
就是數(shù)據(jù)庫的用戶名,密碼和數(shù)據(jù)庫名。如果你的數(shù)據(jù)庫和代碼不再一個電腦就需要數(shù)據(jù)庫的地址。 usersql.js就是實現(xiàn)后臺業(yè)務(wù)所需要的mysql的操作語句
var UserSQL = { insert:
'INSERT INTO user(username,password,date,type,openid) VALUES(?,?,?,?,?)' , bangding:
'UPDATE user SET type = ?,openid = ? WHERE username = ? AND password = ? ' ,queryAll:
'SELECT * FROM user' , getUserByOpenid:
'SELECT * FROM user WHERE openid = ? ' , getUserByInfo:
'SELECT * FROM user WHERE username = ? AND password = ? ' ,deleteUserByInfo:
'DELETE FROM user WHERE username = ? AND password = ? ' ,
};
module.exports = UserSQL;
實現(xiàn)后臺業(yè)務(wù)
業(yè)務(wù)流程 在實現(xiàn)業(yè)務(wù)之前還是先看看流程,我在用了美團(tuán)app后自己畫了一個美團(tuán)登錄和綁定第三方的簡單流程。其中注冊流程也簡化了。 關(guān)于注冊我也簡化了,就是輸入賬號和密碼就可以注冊。 代碼實現(xiàn) 我的具體業(yè)務(wù)是寫在users.js 前提是已經(jīng)建立了對應(yīng)的數(shù)據(jù)庫和表。 首先要引入mysql依賴
var dbConfig =
require (
'../db/DBConfig' );
var User =
require (
'../db/usersql' );
var mysql =
require (
'mysql' );
var client = mysql.createConnection(dbConfig.mysql);
首先看看注冊流程: 1.用戶輸入用戶名和密碼,點擊注冊按鈕,發(fā)送注冊請求; 2.后臺根據(jù)用戶提交的用戶名和密碼去數(shù)據(jù)區(qū)查找有沒有對應(yīng)的用戶, 沒有,注冊成功,把新用戶插入數(shù)據(jù)庫 同時記錄注冊時間 有,注冊失敗,用戶已經(jīng)存在
router.all(
'/user/register' ,
function (req, res, next) {if (req.method ==
"POST" ) {
var param = req.body;}
else {
var param = req.query || req.params; }client.query(User.getUserByInfo,[param.username,param.password],
function (err, results) {if (err){
throw err}
else {
if (results.length ==
0 ) {client.query(User.insert,[param.username,param.password,getDataStr(),
'' ,
'' ],
function (err, results) {if (err){
throw err}
else {res.end(
JSON .stringify({status:
'100' ,msg:
'注冊成功!' }));}})}
else { res.end(
JSON .stringify({status:
'101' ,msg:
'該用戶名已經(jīng)被注冊' })); }}})
});
登錄流程 登錄就是更具用戶提交過來的用戶名和密碼去數(shù)據(jù)區(qū)比較,用戶名和密碼都相同就登錄,否則就提示用戶名或密碼錯誤。 當(dāng)然這是簡單的,還要做的就是是否存在這個用戶。
router.all(
'/user/login' ,
function (req, res, next) {if (req.method ==
"POST" ) {
var param = req.body;}
else {
var param = req.query || req.params; } client.query(User.getUserByInfo,[param.username,param.password],
function (err, results) {if (err){
throw err}
else {
if (results.length ==
0 ) {res.end(
JSON .stringify({status:
'102' ,msg:
'用戶名或密碼錯誤' }));}
else {
if (results[
0 ].username == param.username && results[
0 ].password == param.password) {res.end(
JSON .stringify({status:
'100' ,msg:
'登錄成功' }));}}}})
});
第三方登錄 第三方登錄有這么兩步: 根據(jù)用戶的第三方用戶唯一標(biāo)識,這里統(tǒng)稱openid去數(shù)據(jù)庫查找 數(shù)據(jù)庫的某個用戶的openid和這個相等就返回注冊成功 數(shù)據(jù)庫沒有就,跳轉(zhuǎn)到綁定頁面,做綁定用戶名的操作 這里,為了前臺能夠判斷用戶是否綁定了,我給了一個flag字段。
router.all(
'/user/thirdlogin' ,
function (req, res, next) {if (req.method ==
"POST" ) {
var param = req.body;}
else {
var param = req.query || req.params; } console.log(param.openid);client.query(User.getUserByOpenid,[param.openid],
function (err, results) {if (err){
throw err}
else {
if (results.length ==
0 ) {res.end(
JSON .stringify({status:
'100' ,msg:
'操作成功' ,flag:
'1' }));}
else { res.end(
JSON .stringify({status:
'100' ,msg:
'登錄成功' ,flag:
'2' }));}}})
});
綁定用戶 這個就沒什么了。就是更新用戶的數(shù)據(jù)
router.all(
'/user/bangding' ,
function (req, res, next) {if (req.method ==
"POST" ) {
var param = req.body;}
else {
var param = req.query || req.params; }client.query(User.getUserByInfo,[param.username,param.password],
function (err, results) {if (err){
throw err}
else {client.query(User.bangding,[param.type,param.openid,param.username,param.password],
function (err, results) {if (err){
throw err}
else {res.end(
JSON .stringify({status:
'100' ,msg:
'綁定成功!' }));}})}})
});
測試
以上的流程基本是最簡單的了。 測試可以在瀏覽器測試,根據(jù)接口輸入對應(yīng)的參數(shù)即可。我是自己寫了一個簡單的測試app。 我是事先在數(shù)據(jù)庫插入了一些數(shù)據(jù)。 app效果:
總結(jié)
以前一直都是寫iOS的app或是H5的app。這次自己獨(dú)自寫前后臺。算是一下小小的突破。 前后臺一起寫的時候,發(fā)現(xiàn)前后臺,需要很多的配合。以前只是接口不對了就找后臺修改。這次就是自己修改了。 這需要很多的配合。就像月初做那個物流管理的app。后臺人員我就不吐槽了。我都想找他把數(shù)據(jù)庫的地址用戶名和密碼 要過來,我自己寫后臺算了。 要學(xué)習(xí)的還有很多,遇見問題不要怕,仔細(xì)的看報錯信息,自己先靜下心來思考,看文檔。不懂再上網(wǎng)搜索。
總結(jié)
以上是生活随笔 為你收集整理的Node.js+express+MySQL仿美团注册登录绑定第三方登录 的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔 推薦給好友。