Express应用的结构其实就是R(路由)+M(模型)+V(视图)+C(控制器)。

今天总结之前写的cnode的登陆注册功能。

前提搭好环境, mongodb + redis。

R路由

var express = require('express');
var router = express.Router();
//引入控制器
var signController = require('../controller/sign');// 注册页面
router.get('/signup', signController.showSignUp);// 登陆页面
router.get('/signin', signController.showSignin);// 提交注册
router.post('/signup', signController.signup);// 提交登陆
router.post('/signin', signController.signin);// 登出
router.get('/signout', signController.signout);module.exports = router;复制代码

M(模型)

// user model
var mongoose = require('mongoose'),Schema = mongoose.Schema;
// 连接本地数据库
mongoose.connect('mongodb://127.0.0.1/cnode');// 创建Schema
var UserSchema = new Schema({username: String,pass: String,email: String
});// 为model添加方法// getUserBySignupInfo: 根据注册信息查询用户信息
UserSchema.statics.getUserBySignupInfo = function(username, email, callback){// 查询条件var cond = ['$or', {username: username}, {email: email}];this.find(cond, callback);
};// addUser: 添加用户
UserSchema.statics.addUser = function(user, callback){// add userthis.create(user, callback);
};// getUser: 获取用户
UserSchema.statics.getUser = function(username, pass, callback){this.findOne({username: username, pass: pass}, callback);
};// 根据Schema导出数据模型
module.exports = mongoose.model('User', UserSchema);复制代码

V(视图)

模板代码就不贴了, 主要有一点注意.前端如何判断是否登陆,进行不同模板渲染

// app.js
// 中间件: 是否用户登陆
app.use(function(req, res, next){app.locals.current_user = req.session.user;next();
});复制代码
 <% if(typeof(current_user) != 'undefined' && success){%>
<li><a href="/signout">登出</a></li>
<% } else {%>
<li><a href="/signup">注册</a></li>
<li><a href="/signin">登陆</a></li>复制代码

C(控制器)

// 控制器: 处理登陆与注册逻辑var eventproxy = require('eventproxy');
// 引入user model
var UserModel = require('../model/user');// 渲染注册页面
exports.showSignUp = function (req, res) {res.render('sign/signup');
};// 提交注册信息
exports.signup = function (req, res) {// 获取表单数据var username = req.body.loginname;var pass = req.body.pass;var re_pass = req.body.re_pass;var email = req.body.email; var ep = new eventproxy();// watch emit event ep.on('info_error', function (msg) {res.status(422);res.render('sign/signup', {error: msg});});// 校验表单数据// 空校验let userInfoArr = [username, pass, re_pass, email]for (let i = 0, len = userInfoArr.length; i < len; i++) {if (userInfoArr[i] === '') {let msgErr = userInfoArr[i]ep.emit('info_error', '表单字段内容不能为空'); // emit错误事件breakreturn;}};// 密码确认校验var passIsDiff = pass !== re_pass;if (passIsDiff) {ep.emit('info_error', '密码与确认密码不相等!'); // emit错误事件return;};// 保存到数据库// 根据注册信息去数据库进行查询验证UserModel.getUserBySignupInfo(username, email, function(err, users){if (err) {ep.emit('info_error', '获取用户信息失败!');return;};if (users.length > 0) {ep.emit('info_error', '用户名或者邮箱已存在!');return;};// 保存用户信息UserModel.addUser({ username: username, pass: pass, email: email}, function(err, result){if (result) {res.render('sign/signup', {success: '恭喜,注册成功!'});} else {ep.emit('info_error', '注册失败!');};});});};// 渲染登陆页面
exports.showSignin = function (req, res) {res.render('sign/signin');
};// 提交登陆信息
exports.signin = function (req, res) {// 获取表单数据var username = req.body.name;var pass = req.body.pass;// 空校验if (!username || !pass) {res.status(422);return res.render('sign/signin', {error: '您填写的表单信息不完整!'});};// 获取用户信息UserModel.getUser(username, pass, function(err, user){if (user) {// 登陆成功, 保存用户信息进入sessionreq.session.user = user;res.render('sign/signin', {success: '登陆成功!'});} else {res.status(422);res.render('sign/signin', {success: '用户名或者密码有误!'});};});
};// 处理登出
exports.signout = function (req, res) {// 销毁sessionreq.session.destroy();// 重定向到首页res.redirect('/');
};复制代码

原文地址: cnode系列之登陆注册功能
仓库代码:cnode

cnode系列之登陆注册功能相关推荐

  1. 用户登陆注册功能(PHP)

    对于许多web应用程序而言,数据库都是其核心所在.数据库几乎可以用来存储所有你想要检索和更新的任何信息,下面是一个通过PDO操作MySQL数据库来实现用户登陆注册功能的案例 效果图展示: 这是登陆和注 ...

  2. Android 实现简单的登陆注册功能(SharedPreferences和SQLite)

    最近刚好做了一个Android的登录注册界面,将数据利用SharedPreferences或者SQLite绑定到Android程序中,实现简单的登陆注册功能,本文未涉及到与服务器的交流. 首先,对于登 ...

  3. 利用Bmob快速实现安卓的简单登陆注册功能Bmobsdk3.6.9版本亲测可用(详细图文攻略附带处理小bug)

    前言:从其他人的留言中我知道Bmob这个云数据库,之前我一直在自己写后台但是发现太慢了要学的东西超级多,脚手架也不知道为什么老是搭不上很蛋疼,然后春节又必须回来老家山区里面有些事情耽搁了后台也凉了,后 ...

  4. 小程序登陆注册功能的实现

    我们在开发小程序时,难免会用到登陆注册功能.通常小程序有为我们提供用户授权登陆的功能,但是这个只能获取用户的头像和昵称,我们该怎么样来实现小程序账号密码的注册和登陆呢,今天就来手把手的带大家学习小程序 ...

  5. 借助小程序云开发实现小程序的登陆注册功能

    小程序云开发讲解视频:https://edu.csdn.net/course/detail/9604 有了云开发我们不仅可以方便的获取到用户的openid,还可以通过云开发的数据库来存储用户信息,进而 ...

  6. java用于保存登录对象怎么写,利用对象流模仿登陆注册功能——Java对象流应用...

    要求: 1.建一个User类,类中结构有用户名.密码.注册日期三个属性, 一个注册方法和一个登录方法. 2.建一个Data类,用一个List装载用户数据,有保存数据,读取数据的方法. 3.利用对象流, ...

  7. html登陆注册功能实现,实现用户的登录注册功能

    在基于Spring Boot框架上,实现用户的登录注册功能, 首先分析前期所需要的规划. 1 实现登录注册 前端向后端发起post请求 2用户密码安全性 密码是不推荐明文入库的,在后台采取秘钥加加不可 ...

  8. 网站学习心得-登陆注册功能

    //环境: 1.没什么环境要求 正文 一.需求分析: 1.注册功能 实现新用户信息的创建:账号.密码.昵称.邮箱 账号:不能重复,不能少于6位,纯数字 密码:不能少于6位 昵称:最长6位字符,不能重复 ...

  9. 【Axure】使用中继器实现登陆注册功能

    演示效果: 1.新建 [登录] 页面,导入做好的手机壳素材,拖放"动态面板"到手机屏幕,命名为"登录页动态面板",面板内包含三种状态,如下图所示: 注册状态 2 ...

  10. web_01Java ee实现登陆注册功能

    Web Web_01版本: 实现功能 用户注册 用户登录 设计内容 数据库:mysql 服务器: tomact7 配置 : xml 页面 : jsp+html/css *重点: 数据库相关: 数据库操 ...

最新文章

  1. 智慧城市丨智能时代的城市设计新策略
  2. LLC 逻辑链路控制
  3. 吴恩达机器学习Ex2
  4. 推荐系统炼丹笔记:阿里边缘计算+奉送20个推荐系统强特
  5. 前端学习(2986):一文理解数据劫持4
  6. LeetCode算法入门- String to Integer (atoi)-day7
  7. 百度自动提交链接的php应用seo功能实例
  8. jquery插件实现分页
  9. android自定义listview 显示数组,android TextView控件如何显示Listview数组内容到一个Textview控件上?...
  10. SAS硬盘与SATA硬盘有什么区别
  11. 回顾一年的工作历程_回顾历程、总结经验、展望未来
  12. Facebook语音识别野心曝光,测试Aloha,挑战苹果Siri
  13. 计算字符串出现的次数
  14. PHP是什么,能做什么,为什么用PHP
  15. 推荐一个免费超级好用的简历模板网站
  16. Linux用户获得超级管理员权限
  17. 计算机基础(07)密码学基础
  18. win10 jdk环境变量配置
  19. 链路聚合的定义、链路聚合的概念和基本术语、链路聚合的特点
  20. Hive(23):实例:网站流量分析

热门文章

  1. Java 项目经典代码
  2. Java 实现 1024 小游戏【附源码】
  3. 水仙花数c语言程序vb,VB编程:求水仙花数
  4. 基于Vue学生选课管理系统
  5. UBUNTU16.04下Teamviewer的安装
  6. 彻底解决Android GPS没法定位这一顽固问题
  7. android-mock-gps
  8. Python机器学习常用模块
  9. 【C语言】排序详解——冒泡排序
  10. 学生信息管理系统_C语言实现_单链表