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

nodejs初体验,用node写一个简单的邮箱验证注册登录

时间:2023-04-04 01:20:38 Node.js

开门入山前置根据官方手册,会用到插件nodemail和mongoose。(本文使用mongoose存储数据,如果没有使用数据库,mongoose相关的内容可以忽略)1.目录结构├──server.js//服务入口├──db//数据库文件夹(没有可以使用mongoose时被忽略)│├──model//││└──userModel.js//通过mongoose获取schema对象│└──connect.js//链接数据库├──router//路由文件夹│└──userRouter.js//路由接口├──utils//工具文件夹│└──mail.js//邮件发送插件2.详细思路需要准备npminit--yesnpmiexpressnpminodemailer其次,使用node开发必须要有模块化的思想。其实这篇文章可以在一个server.js中完成,模块化处理有利于提高开发效率,降低维护成本。2.1入口./server.js先创建服务,链接数据库,导入路由constexpress=require('express')constapp=express()constdb=require('./db/connect')//连接数据库varbodyParser=require('body-parser')app.use(bodyParser.urlencoded({extended:false}))app.use(bodyParser.json())//这三行传递参数给解析interface//导入路由constuserRouter=require('./router/userRouter')app.use('/user',userRouter)app.listen(3000,()=>{console.log('serverstart')})2.2链接数据库./db/connect.js的使用是官方demo(系统记得安装MongoDB)//链接数据库constmongoose=require('mongoose')mongoose.connect('mongodb://localhost/chenjingtest',{useNewUrlParser:true,useUnifiedTopology:true})//链接数据库vardb=mongoose.connection//数据库链接对象db.on('error',console.error.bind(console,'connectionerror:'))db.once('open',function(){console.log('数据库连接成功')//连接成功!})2.2.1用户对象模块./db/model/userModelel.js创建一个newshecmaobject更多理解可以移步mongoose手册constmongoose=require('mongoose')varSchema=mongoose.Schema//通过mongoose获取schema对象varuserSchema=newSchema({us:{type:String,required:true},ps:{type:String,required:true},age:Number,sex:{type:Number,default:0}})varUser=猫鼬.model('user',userSchema)//数据对象关联集合('集合名称',schema对象)module.exports=User2.3路由模块./router/userRouter.jsconstexpress=require('express')constrouter=express.Router()constUser=require('../db/model/userModel')//引入constmailSend=require('../utils/mail')letcodes={}//我们的示例验证码存放在内存中正常开发也可以放在redis或者数据库/***@api{post}/user/reg用户注册*@apiName用户注册*@apiGroupUser**@apiParam{String}我们的用户名*@apiParam{String}ps用户密码*@apiParam{String}code电子邮件验证码**@apiSuccess{String}firstname用户的名字。*@apiSuccess{String}lastname用户的姓氏。*/router.post('/reg',(req,res)=>{//获取数据let{us,ps,code}=req.body//如果server.js中没有解析传递工具,if(us&&ps&&code){//判断验证码是否可以if(!(codes[us]===Number(code))){//邮箱地址作为用户名returnres.send({err:-4,msg:'验证码错误'})}User.find({us}).then((data)=>{if(!data.length){//如果用户名不对存在,可以注册returnUser.insertMany({us:us,ps:ps})//注册成功会将数据写入数据库}else{res.send({err:-3,msg:'usernamealreadyexists'})}}).then(()=>{res.send({err:0,msg:'注册成功'})}).catch(err=>{res.send({err:-2,msg:'注册失败'})})}else{returnres.send({err:-1,msg:'参数错误'})}//数据处理//返回数据//res.send('testok')})/***@api{post}/user/loginlogin*@apiNamelogin*@apiGroupUser**@apiParam{String}us用户名*@apiParam{String}ps用户密码**@apiSuccess{String}firstname用户的名字。*@apiSuccess{String}lastname用户的姓氏。*/router.post('/login',(req,res)=>{console.log(req.body)let{us,ps}=req.bodyconsole.log(us,ps)if(us&&ps){//User.find({us,ps}).then((data)=>{if(data.length>0){res.send({err:0,msg:'登录成功'})}else{res.send({err:-2,msg:'用户名或密码不正确'})}}).catch(err=>{//res.send({err:-2,msg:'注册失败'})returnres.send({err:-1,msg:'内部错误'})})}else{returnres.send({err:-1,msg:'参数错误'})}})//发送邮箱验证码/***@api{post}/user/login邮箱验证码发送*@apiName邮箱验证码发送*@apiGroupUser**@apiParam{String}mailemail**@apiSuccess{String}firstname用户的名字。*@apiSuccess{String}lastname用户的姓氏。*/router.post('/getMailCode',(req,res)=>{let{mail}=req.bodyif(mail){letcode=parseInt(Math.random()*10000)//随机验证码codes[mail]=codeconsole.log(codes)mailSend.send(mail,code).then(()=>{res.send({err:0,msg:'验证码发送成功'})})。catch((err)=>{res.send({err:-1,msg:'发送验证码失败'})})}else{res.send({err:-1,msg:'参数错误'})}})module.exports=router3.效果启动本地数据库mongod启动服务nodeserver.js我用的是nodemon插件命令,其实和node命令是一样的,但是可以保存代码的时候不需要重启服务,直接就可以看效果因为我们没有写接口,直接通过postmanDataViewData数据录入成功!