1.准备:创建文件夹和文件
2.inde.html login.html regiter.html
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h1>个人用户信息</h1>
<a href="/login">登录</a>
<br>
<a href="/register">注册</a>
</body>
</html>
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h1>用户注册</h1>
<form action="/userRegister" method="get">
<label for="username">username:</label>
<input type="text" id="username" name="username">
<br>
<label for="password">password</label>
<input type="password" id="password" name="password">
<br>
<button>注册</button>
</form>
</body>
</html>
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h1>用户登录</h1>
<form action="/userLogin" method="post">
<label for="username">username:</label>
<input type="text" id="username" name="username">
<br>
<label for="password">password</label>
<input type="password" id="password" name="password">
<br>
<button>登录</button>
</form>
</body>
</html>
3.nodejs
var http = require("http");
var fs = require("fs");
var url = require("url");
var path = require("path");
var querystring = require("querystring");
//创建服务器
http.createServer((req,res)=>{
//获取路由路径
var urlObj = url.parse(req.url,true);
//处理小图标
if(urlObj.pathname == "/favicon.ico"){
return;
}
//显示index页面
if(urlObj.pathname == "/"){
fs.readFile(path.join(__dirname,"./views/index.html"),(err,data)=>{
if(err){
console.log(err);
}else{
res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"})
res.end(data);
}
})
}
//跳转到注册页面
if(urlObj.pathname == "/register"){
fs.readFile(path.join(__dirname,"./views/register.html"),(err,data)=>{
if(err){
console.log(err);
}else{
res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"})
res.end(data);
}
})
}
//跳转到登录页面
if(urlObj.pathname == "/login"){
fs.readFile(path.join(__dirname,"./views/login.html"),(err,data)=>{
if(err){
console.log(err);
}else{
res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"})
res.end(data);
}
})
}
//处理注册页面逻辑
if(urlObj.pathname == "/userRegister"){
//获取浏览器发送过来的数据
var queryParams = urlObj.query;
//判断用户名和密码是否为空
if(queryParams.username && queryParams.password){
//写入数据
fs.appendFile(path.join(__dirname,"./userInfo.txt"),querystring.stringify(queryParams)+",",(err)=>{
console.log("写入成功");
res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"})
res.end("<h1>注册成功</h1>");
})
}else{
res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"})
res.end("<h1>用户名或密码不能为空</h1>");
}
}
//处理登录页面的逻辑
if(urlObj.pathname == "/userLogin" && req.method.toLowerCase()=="post"){
var postData = "";
//监听数据读取
req.on("data",(chunk)=>{
postData += chunk;
})
//监听数据读取完毕
req.on("end",()=>{
console.log(postData);
//获取文件中的用户名和密码
fs.readFile(path.join(__dirname,"./userInfo.txt"),(err,data)=>{
console.log(data.toString());
var databasesInfo = data.toString().split(",");
console.log(databasesInfo);
for(var value of databasesInfo){
//将数组里面的每一个元素转换为对象
var obj = querystring.parse(querystring.unescape(value));
console.log(obj);
//判断用户名和密码是否正确
if(obj.username == querystring.parse(postData).username && obj.password ==querystring.parse(postData).password){
res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"})
res.end("<h1>登录成功</h1>");
}
}
res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"})
res.end("<h1>用户名或着密码错误</h1>");
})
})
}
}).listen(80);