nodejs完整登陆交互

来源:互联网 发布:淘宝店推广方式 编辑:程序博客网 时间:2024/05/22 09:38

作者:短工邦技术部 - 陈文哲

nodejs入门之后,其实和其它服务端语言的使用逻辑是类似,需要什么就找什么资料就行了。前面的章节主要是各个组件的使用方法,这次联合起来做一个登陆的交互,因为空闲时间不多,我就直接从项目中抽取最简洁的代码贴出来了,可能会报错哦。

前端代码

form(method='POST' action='/Account/login')    p账号:    input(type='text' name='UserName')    p密码:    input(type='password' name='Password')    input(type='submit' value='登录')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

点击登录后,会把表单数据POST到/Account/login,所以我们要新建一个ROUNT来处理这个表单数据

ROUNT代码

//在server.js处理请求//var app = express();var accountROUTE = require('./ROUTE/AccountROUTE')app.post('/Account/login',accountROUTE.login)
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

在ROUNT目录下新建AccountROUTE.js,代码如下

exports.login = function(req,res){  var User = req.body;  //见body-parser段落  if(User.UserName && User.Password) {    //findByKeyValue见UserMODEL    userMODEL.findByKeyValue({"UserName":User.UserName}, function(err,result) {      if( result.length <= 0 ) {        //"不存在该用户"        }      else{        if(User.Password != result[0].Password){           //"密码错误"        }        else{          req.session.user = result[0];//见session段落          //登陆成功        }      }    });  }  else{    //"请填完所有信息项",res);  }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

body-parser

简单说,这个可以把前端POST过来的表单数据直接转换到req.body,是一个JSON对象,Key值就是前端的name,Value值就是前端的value

//安装npm install body-parser
  • 1
  • 2
  • 1
  • 2
//在服务入口端server.js新增代码var bodyParser = require('body-parser');app.use(bodyParser.json());app.use(bodyParser.urlencoded({ extended: false }));
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

UserMODEL

//完整的MODEL代码var Schema = require('mongoose').Schema;var MODEL = Schema({    UserName: String,    Password: String,     Type: String,    Name: String,    Phone: String,    CompanyName: String,    Intro: String,    meta:{        createdAt:{            type:Date,            default:Date.now()        },        updatedAt:{            type:Date,            default:Date.now()        }    }}, {collection: "User"});//定义该MODEL的能提供的数据操作MODEL.statics = {    //KeyValue是一个JSON对象,可以根据需求自由传入    findByKeyValue : function( KeyValue, cb ) {        return this.find(KeyValue).exec( cb );    }};//每一次保存之前会调用这个方法;MODEL.pre("save",function(next) {    if(this.isNew){        this.meta.createdAt = this.meta.updatedAt = Date.now();    }    else{        this.meta.updatedAt = Date.now();    }    next();});/* global db */module.exports = db.model('UserMODEL', MODEL);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

session

npm install cookie-parser
  • 1
  • 1
var session = require("express-session");var cookieParser = require('cookie-parser');app.use(cookieParser());//内存存储方式使用sessionapp.use(session({    secret : "mysecret",    cookie: {maxAge: 8000000 },  //8000s后session和相应的cookie失效过期    resave: false,    saveUninitialized: true,}));
0 0
原创粉丝点击