一個簡單的服務器搭建

首先,這個簡單的服務器的功能是實現註冊和登陸的,還有首頁數據的增刪查改。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,可是最基本的幾個功能是實現了的。

相關文章
相關標籤/搜索