node.js实现注册和登录页面,需要通过不同的路由地址返回不同的页面。
第一步:首先我们需要连接数据库,创建mongo.js
//引入mongoose模块
var mongoose=require("mongoose");
//定义mongodb地址,这里的oa代表着数据库
var DB_url="mongodb://localhost:27017/oa";
//连接mongodb
mongoose.connect(DB_url,{useNewUrlParser: true,useUnifiedTopology: true});
//连接成功时触发该事件
mongoose.connection.on("connected",function(){
console.log("数据库连接成功");
});
//发生错误时执行该事件
mongoose.connection.on("error",function(err){
console.log(err);
});
//连接失败时触发该事件
mongoose.connection.on("disconnected",function(){
console.log("连接失败");
});
module.exports=mongoose;
第二步:我们需要定义Schema,创建user.js
const mongoose=require("./mongo.js");
//定义Schema
var Schema=mongoose.Schema;
var UserSchema=new Schema({
username:{type:String},
password:{type:String}
});
module.exports=mongoose.model("users",UserSchema);
第三步:写一个登录页面为login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>登录页面</h1>
<form action="http://localhost:3000/login2" method="post">
/*注意这里的name值需要和后面的js一致*/
用户名:<input type="text" name="username" /><br />
密码:<input type="password" name="pass" /><br />
<input type="submit" value="登录" />
</form>
</body>
</html>
第四步:写一个注册页面为register.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>注册页面</h1>
<form action="http://localhost:3000/reg" method="post">
用户名:<input type="text" name="username" /><br />
密码:<input type="password" name="pass" /><br />
<input type="submit" value="注册" />
</form>
</body>
</html>
第五步:写一个登录成功的页面为success.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>恭喜你登录成功</h1>
</body>
</html>
第六步:也是重要的一步,实现用户注册,登录。
//引入koa模块
const Koa=require("koa");
//引入koa-body模块
const koaBody=require("koa-body");
//引入koa-route模块
const route=require("koa-route");
//引入fs模块
const fs=require("fs");
//加载user.js模块
const User=require("./user.js");
//创建koa对象
var app=new Koa();
//reg中间件:在注册页面输入账号密码,把账号数据存放数据库,然后进入登录页面
var reg=async ctx=>{
//获取提交数据的对象
var u=ctx.request.body;
//获取数据
var username=u.username;
var pass=u.pass;
//保存数据
var user=new User({
"username":username,
"password":pass
});
//存放数据库
var us=await user.save();
//数据存放成功打开登录页面
if(us){
ctx.redirect("/login1");
}
}
//login1中间件:打开登录页面
var login1=ctx=>{
ctx.type="html";
ctx.body=fs.createReadStream("./login.html");
}
//login2中间件:获取用户输入的账号密码,在数据库里查询数据是否一致,如果一致进入成功页面,否则继续存在登录页面
var login2=async ctx=>{
//获取提交数据的对象
var u=ctx.request.body;
//获取数据
var username=u.username;
var pass=u.pass;
//查询数据库的数据
var user=await User.findOne({"username":username,"password":pass});
//判断数据
if(user){
ctx.redirect("/success"); //数据正确进入成功页面
}else{
ctx.redirect("/login1"); //数据错误继续执行登录页面
}
}
//success中间件:进入成功页面
var success=ctx=>{
ctx.type="html";
ctx.body=fs.createReadStream("./success.html");
}
//获取post请求的数据
app.use(koaBody());
//加载中间件
app.use(route.post('/reg',reg));
//响应登录页面
app.use(route.get("/login1",login1));
//处理登录业务
app.use(route.post("/login2",login2));
//响应登录成功页面
app.use(route.get("/success",success));
//监听端口
app.listen(3000);
注:所有的文件都在同一目录下面,并且需要下载mongoose、koa、koa-route、koa-route、fs等模块。
安装命令:cnpm或npm i 安装的模块