首先,這個簡單的服務器的功能是實現註冊和登陸的,還有首頁數據的增刪查改。javascript
先將這個簡單的服務器搭建出來java
1. 導入node中的用到內置模塊(http,fs,path,url)node
let http = require("http"); //協議 let fs = require("fs); //文件系統 let url = require("url"); //地址 let path = require("path"); //路徑
2. 建立一個服務json
let server = http.createServer();
3. 監聽request請求跨域
server.on("request",(req,res) => { ...... //功能的實現 })
4. 選一個端口號,並監聽數組
server.listen(2468); console.log("server running in 2468");
具體的功能:服務器
註冊界面:post
1. 判斷用戶輸入的用戶名是否已經存在ui
2. 註冊,將註冊的用戶名和密碼存儲到服務器中url
登陸界面:
1. 判斷用戶輸入的用戶名是否已經存在,若是用戶名不存在,就提示用戶請註冊
2. 登陸,判斷用戶所輸入的用戶名和密碼是否和服務器存儲的數據相同
首頁界面:
1. 進入首頁,將用戶相關的數據顯示在頁面上
2. 添加數據
3. 修改數據,能夠是一條數據或者多條數據
4. 刪除數據
5. 查找數據,將全部與用戶所輸入的值有關的數據全都顯示在網頁上
var http = require("http"); var fs = require("fs"); var querystring = require("querystring"); var url = require("url"); var server = http.createServer(); server.on("request",function(req,res){ var urlobj = url.parse(req.url,true); // console.log(urlobj); var pathname = urlobj.pathname; // console.log(pathname); var query = urlobj.query; // console.log(query); //避免出現跨域問題 res.setHeader("Access-Control-Allow-Origin","*"); res.setHeader("Access-Control-Allow-Methods","DELETE,PUT,POST,GET,OPTIONS"); //接口 //註冊用戶名失焦驗證get請求 else if (pathname == "/register_name" && req.method == "GET" && query.uname) { fs.readFile("./data.json","utf8",function(err,data){ data = JSON.parse(data); console.log(data); var flag_register_name = false; for (var i = 0; i < data.length; i++) { // console.log(data[i].uname); if (query.uname == data[i].uname){ flag_register_name = true; break; } } if (flag_register_name) { res.end("0"); //用戶名已經被註冊過 }else { res.end("1"); //用戶名能夠使用 } }) } //用戶登陸 else if (pathname == "/login" && req.method == "POST"){ var data = ""; req.on("data",function(chunk){ data += chunk; }); req.on("end",function(){ var data_obj = querystring.parse(data); console.log(data_obj); fs.readFile("./data.json","utf8",function(err,data){ data = JSON.parse(data); console.log(data); var flag_login = false; for (var i = 0; i < data.length; i++) { if (data_obj.uname == data[i].uname && data_obj.upassword == data[i].upassword){ flag_login = true; } } if (flag_login){ res.end("1"); //登陸成功 }else { res.end("0"); //用戶名或密碼錯誤 } }) }) } //用戶名註冊post請求 else if (pathname == "/register" && req.method == "POST") { var data = ""; req.on("data",function(chunk){ data += chunk; }); req.on("end",function(){ var data_obj_r = querystring.parse(data); console.log(data_obj_r); fs.readFile("./data.json","utf8",function(err,data){ if (data_obj_r.uname && data_obj_r.upassword){ data = JSON.parse(data); //將字符串轉化爲對象,data是一個數組 data.push(data_obj_r); console.log(data); var data_login = JSON.stringify(data); fs.writeFile("./data.json",data_login,"utf8",function(err){ res.end("1"); //註冊成功 }) } else{ res.end("0"); //提交參數錯誤 } }) }) } //首頁獲取數據 else if (pathname == "/index_getdata" && req.method == "GET") { console.log(query); fs.access("./data/" + query.uname + ".json",function(err){ if (err){ fs.writeFile("./data/" + query.uname + ".json","[]",function(err){ fs.readFile("./data/" + query.uname + ".json","utf8",function(err,data){ var data_indgd = '{"message":"ok","data":' + data + '}'; res.end(data_indgd); }) }) }else { fs.readFile("./data/" + query.uname + ".json","utf8",function(err,data){ var data_indgd = '{"message":"ok","data":' + data + '}'; res.end(data_indgd); }) } }) } //添加數據 else if (pathname == "/add_data" && req.method == "POST") { // console.log(query.uname); var data = ""; req.on("data",function(chunk){ data += chunk; console.log(data); }); req.on("data",function(){ var data_add = querystring.parse(data); console.log(data_add); fs.readFile("./data/" + data_add.uname + ".json","utf8",function(err,data){ console.log(data); var data_add2 = JSON.parse(data); console.log(data_add2); if (data_add2.length == 0){ var obj = { pid : 0, name : data_add.name, sex : data_add.sex, age : data_add.age, mail : data_add.mail, phone : data_add.phone }; data_add2.push(obj); var obj2 = JSON.stringify(data_add2); // console.log(obj2); fs.writeFile('./data/' + data_add.uname + ".json",obj2,function(err){ res.end('1'); //添加成功 }) }else{ var obj = { pid : data_add2[data_add2.length-1].pid + 1, name : data_add.name, sex : data_add.sex, age : data_add.age, mail : data_add.mail, phone : data_add.phone } data_add2.push(obj); var obj2 = JSON.stringify(data_add2); fs.writeFile('./data/' + data_add.uname + ".json",obj2,function(err){ res.end('1'); //添加成功 }) } }) }) } //刪除數據 else if (pathname == "/remove_data" && req.method == "GET"){ console.log(query); fs.readFile('./data/' + query.uname + ".json",'utf8',function(err,data){ var data = JSON.parse(data); console.log(data); for(var i = 0;i < data.length;i++){ if(data[i].pid == query.pid){ break; } } data.splice(i,1); var str = JSON.stringify(data) console.log(str); fs.writeFile('./data/' + query.uname + ".json",str,function(err){ res.end("1"); }) }) } //修改數據 else if (pathname == "/query_data" && req.method == "POST") { var data = ''; req.on("data", function(chunk){ data += chunk; }); req.on('end', function(err){ var revobj = querystring.parse(data); var uname = revobj.uname; var pid = revobj.pid; // console.log(revobj); fs.readFile('./data/' + uname + ".json",'utf8',function(err,data){ var data = JSON.parse(data); for(var i = 0;i < data.length;i++){ if(data[i].pid == pid){ break; } } if(revobj.name){ data[i].name = revobj.name; } if(revobj.sex){ data[i].sex = revobj.sex; } if(revobj.age){ data[i].age = revobj.age; } if(revobj.mail){ data[i].mail = revobj.mail; } if(revobj.phone){ data[i].phone = revobj.phone; } var str = JSON.stringify(data); fs.writeFile('./data/' + uname + ".json",str,function(err){ res.end("1"); }) }) }) } }); server.listen(2468); console.log('server is running in 127.0.0.1:2468');
在首頁數據在顯示,我用的是笨的方法,在每次操做數據以後,都會進行一次數據的獲取,在數據獲取前會將以前展現的數據進行清空,而後再將後面獲取的數據展現上去。
並且,這個服務器不是很完整,有些bug,可是最基本的幾個功能是實現了的。