zoukankan      html  css  js  c++  java
  • 一个简单的服务器搭建

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

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

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

  • 相关阅读:
    新书推荐——《How We Test Software at Microsoft》
    [ZZ]采访与书摘:使用C#进行基于模型的软件测试和分析
    Adding Different Types of Data Sources to a Web Test
    [ZZ]为什么传统的自动化测试工具会扼杀敏捷?
    很久没有这么High了
    留图以纪念这次地震
    white——Automate windows applications
    WatiN、Wax、WatiN Test Recorder开源自动化测试框架
    绝版的T61普屏
    有感于公司搬家
  • 原文地址:https://www.cnblogs.com/mercy-up/p/10479211.html
Copyright © 2011-2022 走看看