当前位置: 首页 > 后端技术 > Node.js

02-个人博客笔记-登录注册界面的实现

时间:2023-04-04 00:37:26 Node.js

安装mongodb参考http://www.runoob.com/mongodb...建议使用brew安装,安装后运行mongodb配置数据库完成,并启动服务器1.安装mongoose使用npm下载模块时,会发现很慢,推荐淘宝的镜像。cnpmi猫鼬--save2.在index.js中连接数据库//加载数据库模块constmongoose=require("mongoose");mongoose.connect('mongodb://localhost:27017/testblog',function(err){if(err){console.log('数据库连接失败');}else{console.log('数据库连接成功');app.listen(4000);}});其中testblog是我们创建的数据库的名称,终端运行node。或节点index.js。如果数据库连接成功,说明服务已经开始注册了。接口实现1、在编写接口之前,需要安装一个body-parser插件。Body-parser是一个非常常用的express中间件。就是解析post请求的请求体。cnpmibody-parser--save在index.js中引入varbodyParser=require('body-parser');app.use(bodyParser.urlencoded({extended:false}))app.use(bodyParser.json())2.在routers下新建user.js,配置路由constexpress=require('express');constrouter=express.Router();router.get('/regiest',function(res,rep){rep.send('你好,单词!');});module.exports=路由器;使用app.use('/user',require('./routers/user'));在index.js中这样加载路由varexpress=require('express');varapp=express();varbodyParser=require('body-parser');//注意解析要放在app上面。use(bodyParser.urlencoded({extended:false}))app.use(bodyParser.json())app.use('/user',require('./routers/user'));//加载数据库模块constmongoose=require("mongoose");mongoose.connect('mongodb://localhost:27017/testblog',function(err){if(err){console.log('数据库连接失败');}else{console.log('数据库连接成功');app.listen(4000);}});重启服务,在浏览器中输入http://localhost:4000/user/regiest,可以看到打印信息说明路由配置成功。3.在schemas文件夹下新建user.js,用户相关的Schemavarmongoose=require('mongoose')module.exports=newmongoose.Schema({//usernameuserName:String,//passwordpassWord:String,//registrationdatecreatDate:Date,token:String})4.在models文件夹下新建user.js,创建用户相关的模型,数据库的相关操作都是通过我们在models下创建的模型来操作的。varmongoose=require('mongoose')varuserSchema=require('../schemas/user')module.exports=mongoose.model('User',userSchema)5.注册接口router.post('/regiest',function(req,res,next){varuserName=req.body.userNamevarpassword=req.body.passWordvarrePassWord=req.body.rePassWordif(userName===''){responseData.success=falseresponseData。message='用户名不能为空'res.json(responseData)return}if(password===''){responseData.success=falseresponseData.message='密码不能为空'res.json(responseData)return}if(password!==rePassWord){responseData.success=falseresponseData.message='两次输入的密码不一致'res.json(responseData)return}User.findOne({userName:userName}).then((userInfo)=>{if(userInfo){//responseData.success=falseresponseData.message='该用户已经存在于数据库中'res.json(responseData)return}else{//写入数据库//获取哈希值密码加密varhash=bcrypt.hashSync(password,10)//将哈希值赋给密码变量password=hashvaruser=newUser({userName:userName,passWord:password,creatDate:newDate(),})returnuser.save()}}).then((newUserInfo)=>{responseData.success=trueresponseData.message='恭喜,注册成功'responseData.data={userName:newUserInfo.userName,userId:newUserInfo._id}res.json(responseData)})});其中bcrypt为加密相关库cnpmibcrypt--save重启服务测试注册界面6.启动博客客户端。现在我们在页面放置几个简单的文本框来测试登录界面。blogclient的具体网络配置请参考具体的demo7。登录界面要注意token生成规则,依赖boxjsonwebtoken和express-jwtcnpmijsonwebtoken--savecnpmiexpress-jwt--save//loginconstjwt=require('jsonwebtoken');router.post('/login',function(req,res,next){varuserName=req.body.userNamevarpassword=req.body.passWordUser.findOne({userName:userName}).then((userInfo)=>{如果(userInfo){//判断密码是否正确constpwdMatchFlag=bcrypt.compareSync(password,userInfo.passWord);if(pwdMatchFlag){responseData.success=trueresponseData.message='登录成功'responseData.data={userName:userInfo.userName,userId:userInfo._id,//token有效期12h(60*60*12)token:jwt.sign({data:{_id:userInfo._id,username:userInfo.userName},exp:Math.floor(Date.now()/1000)+(60*60*12)},'jwt-secret')}res.json(responseData)返回}else{responseData.success=falseresponseData.message='密码错误'res.json(responseData)return}}else{responseData.success=falseresponseData.message='用户不存在'res.json(responseData)return}})});importvarinindex.jsjwt=require('express-jwt');//token相关注册和登录不需要token验证varjwt=require('express-jwt');app.use(jwt({secret:'jwt-secret',debug:true}).unless({path:['/user/regiest','/user/login']}))demodemo-02-个人博客笔记-登录注册接口实现相关库express-jwtjsonwebtokenbcryptbody-parser项目上传每次提交github都是一个分支在线地址