Node.js 注册功能实现写入数据库

Nodejs cyanprobe 9年前 (2015-12-17) 4242次浏览 已收录 0个评论

前言:

话说这个玩意真的不好折腾,特别是在自己js水平几乎为0的情况下,异步编程真的很纠结,特别是那无穷无尽的括号,根本找不到错误的理由,好了,不抱怨了,自己水平菜不能怪社会。今天来看看Node连接mongodb的一个实例雷叔《Node.js实战》上面的。

开始折腾:

1.添加 package.json中的依赖包如下:

  1.  "express-session": "1.12.1", //express所需session组件
  2. "connect-mongo":"0.8.2", //用来将connect的session持久化到mongodb中的
  3. "mongoose":"4.3.0", //ORM对象映射关系框架
  4. "connect-flash":"0.1.1", //用来显示一次性的提醒(刷新后失效)
  5. "mongodb":"2.0.52"//真正的active mongodb驱动

2.建立user modules的创建:

  1. var mongodb = require('./db');
  2. function User(user) {
  3. this.name = user.name;
  4. this.password = user.password;
  5. this.email = user.email;
  6. };
  7. module.exports = User;
  8. //储存用户信息
  9. User.prototype.save = function(callback) {
  10. //要存入数据库的文档
  11. var user = {
  12. name: this.name,
  13. password: this.password,
  14. email: this.email
  15. };
  16. //打开数据库
  17. mongodb.open(function(err, db) {
  18. if (err) {
  19. return callback(err); //错误返回err信息
  20. }
  21. db.collection('users', function(err, collection) {
  22. if (err) {
  23. mongodb.close();
  24. return callback(err);
  25. }
  26. //将用户数据插入到users集合
  27. collection.insert(user, {
  28. safe: true
  29. }, function(err, user) {
  30. mongodb.close();
  31. if (err) {
  32. return callback(err); //错误返回err信息
  33. }
  34. callback(null, user[0]); //成功err为null,并返回储存后的用户文档
  35. });
  36. });
  37. });
  38. };
  39. //读取用户信息
  40. User.get = function(name, callback) {
  41. mongodb.open(function(err, db) {
  42. if (err) {
  43. return callback(err);
  44. }
  45. //读取user集合
  46. db.collection('users', function(err, collection) {
  47. if (err) {
  48. mongodb.close();
  49. return callback();
  50. }
  51. //查找用户名name建值为name的一个文档
  52. collection.findOne({
  53. name: name
  54. }, function(err, user) {
  55. mongodb.close();
  56. if (err) {
  57. return callback(err);
  58. }
  59. callback(null, user); //返回用户的信息
  60. });
  61. });
  62. });
  63. }

3.对route进行修改 reg.html为注册页面(对路由规则完善):

  1. var crypto = require('crypto');//引入加密模块
  2. var User = require('../modules/user.js');
  3. module.exports = function(app) { //路由模板样式可以在原路由routes中查看
  4. app.get('/', function(req, res, next) {
  5. res.render('index', {
  6. title: '主页'
  7. });
  8. });
  9. app.get('/login', function(req, res, next) {
  10. res.render('login', {
  11. title: '登陆'
  12. });
  13. });
  14. app.get('/err', function(req, res, next) {
  15. res.render('err', {
  16. title: '错误'
  17. });
  18. });
  19. app.get('/reg', function(req, res, next) {
  20. res.render('reg', {
  21. title: '注册'
  22. });
  23. });
  24. app.post('/reg', function(req, res, next) {
  25. var name = req.body.name,
  26. password = req.body.password,
  27. password_re = req.body['password-repeat'];
  28. //检测两次用户输入的是否一致
  29. if (password_re != password) {
  30. req.flash('err', '两次输入的密码不一致!');
  31. return res.redirect('/reg'); //返回注册页
  32. }
  33. //生成密码的md5值
  34. var md5 = crypto.createHash('md5'),
  35. password = md5.update(req.body.password).digest('hex');
  36. var newUser = new User({
  37. name: req.body.name,
  38. password: password,
  39. email: req.body.email
  40. });
  41. //检查用户名是否已经存在
  42. User.get(newUser.name, function(err, user) {
  43. if (err) {
  44. req.flash('error', err);
  45. return res.redirect('/');
  46. }
  47. if (user) {
  48. req.flash('error', '用户已存在!');
  49. return res.redirect('/reg');
  50. }
  51. //如果不存在则新增用户
  52. newUser.save(function(err, user) {
  53. if (err) {
  54. req.flash('error', err);
  55. return res.redirect;
  56. }
  57. req.session.user = user;
  58. req.flash('sucess', '注册成功!');
  59. res.redirect('/'); //注册后返回主页
  60. });
  61. });
  62. });
  63. }

4.在 app.js  的var settings = require(‘./views/setting’); 下添加var flash =require(‘connect-flash’); 用来返回刷新页面。

测试:

首先运行mongdb,然后npm start 启动项目,访问localhost:3000/reg ,输入账号,两次密码,还有邮箱,点击注册。然后我们看数据库当前信息刷新。
2015-12-17_194847
我们打开 mongo.exe  use test //使用test库 ,使用db.users.find()  命令查询users集合里的第一个数据。返回如下,我们可以看到,注册的信息已经输入到了数据库,而且password已经通过crypto进行了MD5加密。
2015-12-17_195955

后记:

照葫芦画瓢,那样就没得意思了,继续去恶补知识了,话说我的Noder  Q群——193572405 已经来了大概50人了,这玩意很难学,特别是对js前端的东东没有接触过的,我希望折腾node.js的菜鸟大神们有空来群里逛逛,我分享了很多资料。


CyanProbe , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Node.js 注册功能实现写入数据库
喜欢 (2)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址