node的web框架koa2+mongodb实现用户注册与登录验证(加密)过程

本实例旨在演示node+koa2+mongodb一个简单的效果:

1 用户注册,(支持上传头像),保存用户信息至服务器(mongodb)

2 用户登录,如果用户输入密码和服务器加密后的密码一致,则返给客户端用户信息,否则返给客户端json,提示用户名或密码不正确

目录结构如下

koa(根目录)

    --------node_modules

    -------static //存放静态资源的目录

              ----------upload   //上传头像的目录

             -----------regist.html  //注册页面

             ------------login.html  //登录页面

    ------login.js              //登录逻辑的服务器文件

    ------regist.js              //注册逻辑的服务器文件

    --------dataBase.js     //处理数据库的文件

--------------------------------------------------------------------------------------------------------------------------

1存放在静态资源文件夹static下的两个页面

 regist.html

<form action="http://localhost:9999/addInfo" method="POST" enctype="multipart/form-data">

<p>姓名<input type="text" name="username" value=""></p>

<p>性别<input type="radio" name="gender" value="male"/>男<input type="radio" name="gender" value="female"/>女</p>

<p>密码<input type="password" name="password"></p>

<p><input type="file" name="file"></p>

<p><input type="submit"></p>

</form>

login.html

<form action="http://localhost:8989/login" method="POST" enctype="application/x-www-form-urlencoded">

<p><input type="text" name="username"></p>

<p><input type="password" name="password"></p>

<p><input type="submit" value="提交"></p>

</form>

 

2 位于根目录下的两个服务器文件regist.js、login.js

regist.js

var koa=require("koa");

var fs=require("fs");

var path=require("path")

var koaBody=require("koa-body");

var koaStatic=require("koa-static")

var router=require("koa-router")();

const baseUrl="http://localhost:9999";

var crypto=require("crypto");

 

//引入数据库配置文件

const dataBase=require('./dataBase.js');

var app=new koa();

 

//配置中间件

app.use(koaBody({

multipart:true,

formidable:{

uploadDir:path.join(__dirname,"static/upload"),

keepExtensions:true

}

}))

app.use(koaStatic(__dirname+"/static"));

app.use(router.routes())

app.use(router.allowedMethods());

 

//配置路由

router.get("/",async(ctx)=>{

let stream=fs.createReadStream("./static/submit.html");

ctx.type="html";

ctx.body=stream

})

router.post("/addInfo",async(ctx)=>{

let {username,password,gender}=ctx.request.body;

if(ctx.request.method!="get"){

let file=ctx.request.files.file;

let filePath=file.path;

let index=filePath.lastIndexOf("\\");

//写入数据到数据库,加密密码;

let md5=crypto.createHash("md5");

let newpass= md5.update(password).digest("hex");

let data={

username,

password:newpass,

gender,

url:baseUrl+`/upload/${filePath.substring(index+1)}`

}

let res= await dataBase.add(data);

//返回数据给客户端

ctx.body=data

}

})

app.listen(9999)

login.js

var fs=require("fs");

var koaBody=require("koa-body");

var koa=require("koa");

var router=require("koa-router")();

var crypto=require("crypto");

var dataBase=require("./dataBase.js");

var app=new koa();

app.use(koaBody());

app.use(router.routes());

app.use(router.allowedMethods());

 

router.get("/",async (ctx)=>{

ctx.type="html";

ctx.body=fs.createReadStream("./static/login.html");

})

 

router.post("/login",async (ctx)=>{

let {username,password}=ctx.request.body;

let md5=crypto.createHash("md5");

md5.update(password);

let passres=md5.digest("hex");

let newpass=passres

let resData=await dataBase.findOneUser({username:username});

if(resData.password==newpass){

ctx.body={

result:true,

data:{

username

}

}

}else{

ctx.body={

result:false,

data:{},

errInfo:"用户名或密码错误"

}

}

})

 

app.listen(8989)

 

最后一个配置服务器的baseData.js文件

baseData.js

var mongoose=require("mongoose");

const dbURL="mongodb://localhost:27017/user";

mongoose.connect(dbURL)

mongoose.connection.on("connected",()=>{console.log("连上"+dbURL)})

mongoose.connection.on("error",()=>{console.log("连结失败"+err)})

var schema=new mongoose.Schema({username:String,password:String,gender:String,url:String})

var userData=mongoose.model("userData",schema);;

 

class dataBaseHandle{

constructor(){

}

//添加

async add(data){

try{

       return await userData.create(data)

}catch(err){

      throw new Error(err)

}

}

async findOneUser(data){

  try {

         return await userData.findOne(data)

  } catch (error) {

      throw new Error(err)

 }

}

 

}

module.exports=new dataBaseHandle

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值