一个简单的服务器搭建

首先,这个简单的服务器的功能是实现注册和登录的,还有首页数据的增删查改。

先将这个简单的服务器搭建出来

1. 导入node中的用到内置模块(http,fs,path,url)

let http = require("http");        //协议
let fs = require("fs);        //文件系统
let url = require("url");        //地址
let path = require("path");        //路径

2. 创建一个服务

let server = http.createServer();

3. 监听request请求

server.on("request",(req,res) => {
    ......        //功能的实现
})

4. 选一个端口号,并监听

server.listen(2468);
console.log("server running in 2468");

具体的功能:

 注册界面:

  1. 判断用户输入的用户名是否已经存在

  2. 注册,将注册的用户名和密码存储到服务器中

 登录界面:

  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,但是最基本的几个功能是实现了的。

猜你喜欢

转载自www.cnblogs.com/mercy-up/p/10479211.html