node.js搭建简易的HttpServer

前面我们学习了基础的node知识,现在我们把之前的东西综合一下,实现一个简易的httpserver,重要的是对浏览器传过来的数据的处理,以及服务端返回给浏览器的数据的处理。

1.先判断是接口还是文件,再根据get.act的值进行判断是登录还是注册,如果登录的话,判断名字是否存在,如果存在,再判断密码是否正确,如果注册的话,判断是否已经存在,满足条件的话则成功。
const http = require("http")
const querystring = require("querystring")
const fs = require('fs');const urlLib = require("url")

var users = {};
var server = http.createServer(function(req,res){    
	var str = ' ';    
	req.on("data",function(data){       
		 str+=data;    
	})    
	req.on("end",function(){        
		var obj = urlLib.parse(req.url,true);        
		const url = obj.pathname;        
		const get = obj.query;        
		const post = querystring.parse(str);
       //区分接口和文件        
       		if(url == "/user"){//接口          
       		 // console.log(get.act)            
       		 	switch(get.act){                
       		 		case 'reg':                
       		 		//1.检查用户名是否已经存在                
       		 			if(users[get.user] ){                    
       		 				res.write('{"ok":false,"msg":"此用户已存在"}');                
       		 			}
       		 			else{                    
       		 			 //2.插入users                    
       		 			 users[get.user] = get.pass;                    
       		 			 res.write('{"ok":true,"msg":"注册成功"}');                
       		 			}                   
       		 		 break;               
       		 		  case 'login':               
       		 		   //检查用户是否存在
             			   // console.log("444:"+users[get.user]);               
             			    // console.log("555"+users[get.pass]);
                				if(users[get.user] == null){                   
                					 res.write('{"ok":false,"msg":"此用户不存在"}');               
                				 }
                				 else if(
                				 	users[get.user]!=get.pass){                    
                				 		res.write('{"ok":false,"msg":"此用户或密码错误"}');              
                				  }
                				  else{                    
                				  	res.write('{"ok":true,"msg":"登录成功"}');                }                    break;               
                				  	
                		default:                   
                		 res.write('{"ok":false,"msg":"未知的act"}');            
                }            
             res.end();       
            }
            
       
       	 else{//文件            
       	 	var file_name = './www'+ url;            
       	 	fs.readFile(file_name,function(err,data){              
       	 		if(err){                    
       	 			res.write('404')                
       	 			}                
       	 		else{                   
       	 		 //console.log(data.toString())                    
       	 		 res.write(data.toString())                
       	 		 }                
       	 res.end();            
       	 });         
       	}    
      });
     });
   server.listen(8090);

2.前端的部分就不详细的说了,代码如下:

<body>
用户:<input type="text" id ="user" value="" >        
密码:<input type="password" id ="pass" value=""><br>       
 <input type="button" value="注册" id="reg_btn"><br>        
 <input type="button" value="登录" id="login_btn">
 </body> 
<script type="text/javascript">    
	window.onload = function(){        
	    var oTxUser = document.getElementById('user');        
	    var oTxpass = document.getElementById('pass');        
	    var oBtnReg = document.getElementById('reg_btn');        
	    var oBtnLogin = document.getElementById('login_btn');               
	    
	    oBtnLogin.onclick = function(){            
	          ajax({                
	               url:"./user",               
	               data: {                    
	                     act:'login',                    
	                     user:oTxUser.value,                    
	                     pass:oTxpass.value         
	                   },                
	                type:"get",                
	                success:function(str){                                        
	                     var json =eval('(' + str + ')');                   
	                          // console.log(json);                    
	                               if(json.ok){                        
	                                   alert("登录成功");                    
	                                }                    
	                                else{                        
	                                   alert("登录失败"+json.msg);                        
	                                console.log(json.msg);                    
	                                }
                        },                
                      error:function(){                    
                           alert("失败");                
                       }                                       
                 });        
              }                
      oBtnReg.onclick= function(){            
      	ajax({                
      		url:"./user",                
      		data: {                    
      			act:'reg',                    
      			user:oTxUser.value,                    
      			pass:oTxpass.value                
      		},                
      		type:"get",                
      		success:function(str){                    
      			var json = eval('(' + str + ')');                    
      			if(json.ok){                        
      				alert("注册成功")                    
      			}                    
      			else{                        
      				alert('注册失败'+json.msg)                    
      			}                
      		},                
      		error:function(){                    
      			alert("通信错误");                
      		}              
      	});        
      }    
     } 
     </script>

3.还有重要的一部分就是ajax,连接了客户端与服务端的数据传输,这里可以直接用封装好的,:

function ajax(json){
    if(window.XMLHttpRequest){        
    	var ajax = new XMLHttpRequest();    
    }    
    else{        
    	var ajax = new ActiveXObject( "Microsoft.XMLHTTP" );    
    }
    if(json.type=='get'){        
    	ajax.open('get',json.url+'?'+JsonToString(json.data),true);        
    		ajax.send();    
    }    
    else if(json.type=='post'){        
    	ajax.open('post',json.url,true);        
    	ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");        	ajax.send(JsonToString(json.data));    
    }        
    ajax.onreadystatechange = function(){        
    	if(ajax.readyState == 4){           
    		 if(ajax.status>=200 && ajax.status<300 || ajax.status == 304){      
    		 	json.success(ajax.responseText);
            	}            
            	else{                
            		json.error && json.error();            
            	}        
            };    
          };
    function JsonToString(json){        
    	var arr = [];        
    		for(var i in json){           
    			 arr.push(i+'='+json[i]);        
    		};        
    	return arr.join('&');    
    }}

这里已经实现了,感兴趣的可以试一下,这里需要注意的是前后端的变量名必须保持一致,还有写服务端的时候必须加上res.end(),不然请求一直都没有结束,会出错,今天这个错误找了很久,所以一定要;牢记。

发布了57 篇原创文章 · 获赞 22 · 访问量 7292

猜你喜欢

转载自blog.csdn.net/qq_39897978/article/details/96894670