文章是按“开课吧”(class6)的学习路径写的。
目录结构:
1.test.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>nodejs practise</title>
</head>
<body>
username: <input type="text" id = "user" placeholder="请输入用户名">
psw: <input type="text" id="psw" placeholder="请输入密码">
<input onclick="register()" type="button" value="注册">
<input onclick="login()" type="button" value="登录">
<script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
let user = document.getElementById("user");
let psw = document.getElementById("psw");
function register(){
$.ajax({
type: "post",
data: {"action": "regist", "user": user.value, "psw": psw.value},
url: "/user",
success: function (data) {
var json = eval("("+data+")"); // 这里一定要用eval("(x = y)") 转换并返回
alert(json.msg)
}
})
}
function login(){
$.ajax({
type: "post",
data: {"action": "login", "user": user.value, "psw": psw.value},
url: "/user",
success: function (data) {
console.log("data=",data);
var json = JSON.parse(JSON.stringify(data))
alert(json)
}
})
}
</script>
</body>
</html>
2.server.js
const http = require("http"); //http传输协议处理模块
const fs = require("fs"); // 文件处理模块,非流式处理,流式处理用stream
const querystring = require("querystring"); // 处理分段返回的数据,转换为json对象
const urlLib = require("url"); // 处理url ,取得参数对象json格式
//简单的接口设计
// localhost:8087/user?action=regist&user=tcc&psw=123456
// localhost:8087/user?action=login&user=tcc&psw=123456
let users = {}; // 现在我们没有数据库,所以定义一个对象来存储用户的信息.
http.createServer(function(req,res){
let str = "";
req.on("data",function(data){
str += data; // 分多次处理前台提交的数据,所以要拼接起来
})
req.on("end",function(){
let urlObj = urlLib.parse(req.url); // 转为json
let pathname = urlObj.pathname;
let queryObj = urlObj.query;
let fileName = "./www" + pathname; // 将前端的静态页面统一放在了www目录下
let valuableQuery = querystring.parse(str) || queryObj; // 处理 post 和 get请求
console.log("str=",str)
console.log("valuableQuery=",valuableQuery)
if(pathname == "/user"){
switch(valuableQuery.action){
case "regist":
if(users[valuableQuery.user]){
res.write('{"ok":false,msg:"用户名已存在"}')
}else{
users[valuableQuery.user] = valuableQuery.psw;
res.write('{"ok":true,"msg":"注册成功"}')
}
break;
case "login":
if(users[valuableQuery.user] == null){
res.write('{"ok":false,msg:"用户不存在"}')
}else if( users[user] != valuableQuery.psw ){
res.write('{"ok":false,msg:"密码不正确"}')
}else{
res.write('{"ok":false,msg:"登录成功"}')
}
break;
default:
console.log("user default!")
break;
}
res.end(); // 告诉前端,返回信息结束了
}else{
fs.readFile(fileName,function(err,data){
if(err){
}else{
res.write(data);
console.log("读取文件成功!")
res.end();// 告诉前端,返回信息结束了
}
})
}
})
}).listen(8087)
Brief summary:
以上是用原生的nodejs 结合一些官方的模块写的一个简单的示例,希望对大家有帮助哦^_^。