学习新技术最快的方法就是做项目。这两天写了一个基于express和MongoDB的Web登录功能。我们先来看看效果。技术选择Node.jsMongoDBexpressmongooseBootstrap其中MongoDB的简单使用可以看我之前的博文。项目目录。├──数据库│├──entity.js//实体│├──model.js//模型│└──schema.js//骨架架构├──package.json├──public│├──home.html//首页│├──login.html//登录页面│├──register.html//注册页面│└──source│├──login.css│├──login.less│└──reset.css├──routes│├──home.js//首页路由│├──login.js//登录路由│├──login_process.js//登录POST处理│├──register.js//注册路由│└──register_process.js//注册进行POST处理└──server└──index.js//入口文件的实现思路进入登录页面,点击登录按钮,使用POST方式提交向后台提交数据并匹配从数据库中检索的数据。Route根据情况路由index.jsapp.use('/',loginRouter);app.use('/login_process',loginProcessRouter);app.use('/home',homeRouter);app.use('/register',registerRouter);app.use('/register_process',registerProcessRouter);在入口文件login.js中分配路由varexpress=require('express');varapp=express();varpath=require('path');varrouter=express.Router();路由器.get('/',function(req,res){res.sendFile(path.join(__dirname,'../public','login.html'));});module.exports=router;简单说明下,当浏览器的地址栏变为localhost:3000/的时候,冲洗login.htmllogin_process.jsvarexpress=require('express');varpath=require('path');varbodyParser=require('body-解析器');varapp=express();varrouter=express.Router();varUserModel=require('../database/model');varUserEntity=require('../database/entity');varurlencodedParser=bodyParser.urlencoded({extended:false});router.post('/',urlencodedParser,function(req,res){response={username:req.body.username,password:req.body.password};varinput_username=response.username;varinput_password=response.password;functiongetUser(){varuser;user=UserModel.findOne({USERNAME:input_username}).exec().then(function(result){returnresult;}).error(function(error){return'PromiseError:'+error;})return用户;}getUser().then(function(result){if(result===null){res.redirect('/');}elseif(input_username===result.USERNAME||input_password===result.PASSWORD){console.log('true');res.redirect('/home');}else{console.log('false');res.redirect('/');}}).error(function(error){return'PromiseError:'+error;})});module.exports=router;在login_process.js文件中,我们从前端页面POST接收数据,使用mongoose的Model进行查询比较它,数据库使用Promise来避免回调地狱,让代码更好的理解和维护。注:Model模型是通过Schema构建的。除了Schema定义的数据库骨架外,它还有数据库行为模型。相当于缺少管理数据库属性和行为的类。毕竟只是一个小demo,还有很多不完善的地方,就列在这里吧,方便以后弥补前端输入提示的问题。如果不使用session和cookie进行登录拦截,就写到这里。祝大家度过愉快的一天;)