用node和express连接mysql实现登录注册的实现代码

网友投稿 332 2023-05-02


用node和express连接mysql实现登录注册的实现代码

为了数据库课设,打算后台用node搭建,前台用vue搞个博客出来(因为前段时间在学啊)。本来node不想用框架,喜欢先打好基础的,奈何3个星期要把他做完和应付各种考试,所以最后还是用了express,大大简化我的学习成本。

数据库我选了比较“正式”的mysql,代码方面这个比MongoDB复杂一些。而且这是数据库课设,如果用mongodb老师肯定让我挂了,因为没有涉及到设置主键、外键等。

先在主入口js引入登录注册业务js和发起一个监听端口

var express = require('express');

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

var app = new express();

app.use(express.static('public')); //静态资源的入口

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秒后跳转到首页");

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("登录名已经有人用")

}

}

})

})

http://

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) {

ZUpGwOwb //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' : nulhttp://l;

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;

代码很多,不一一解释了,如果以后有空再补回。先说几个点

我把连接数据库的逻辑都包在了select方法里。因为最后要把查询到的结果返回回去,所以就要return,但是!!查询数据库是异步操作!!所以直接在select函数的最后一行return是没有效果的,所以就算retZUpGwOwburn都要在查完后的那个回掉函数,但是在回掉函数return 的话是不能return到select函数外的。解决方案就是es6的Promise。详细的就自己学相关知识了。

拿到查询后的结果,登录与注册要分清楚逻辑,什么时候是成功的什么情况是失败的。注册这里我掉坑了。因为名不能重复,所以要ZUpGwOwb先查询,如果能查到放回的是status=99999。刚开始我没理解清楚Promise,以为查询不成功就是走reject(err)其实并不是,查询不成功返回的是[],执行的还是resolve(),区分就只能看他返回来的status。

还有保存登录状态,就是session,这里我也没怎么弄懂。但是这一步可以放在router的中间件执行,这样每个经过这个router就能执行那一步了。如果存在req.session.user的时候,就把当前的locals.user赋值。

导致我注册那里摔了很久还爬不上来除了没理解清楚Promise外,还有mysql不能输入中文。当时我没有设utf8,所以一直报错,走的是reject(err)。不只只把mysql的语言设置为utf8,还要注意navcicat新建属性的时候的字符类型,不然字符冲突搞得不能插入语句成功。

最后来个展望未来。

文章页我打算用jade渲染整个文章html再返回出来。因为文章嘛,要变的其实也不多,而且用vue的话,个人感觉像评论啊这种小组件用比较好,文章都是静态的,所以先在后端渲染出来直接返回,还不用再请求一遍再渲染。

想了想进度了能力,除了增删改查文章,我觉得我的博客也只能有查看和评论文章的功能,不知道vue哪里能用。。。可能我也还没很好的接触和理解vue毕竟我才学到vur-router。应该大的功能就是做一个简洁版markdown吧


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Vue学习之路之登录注册实例代码
下一篇:微信小程序 跳转传递数据的实例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~