(2)nodejs---使用nodejs搭建较为完整的服务器

既然nodejs是针对后台开发的,可以先试着用nodejs搭建一个简单的服务器。

  在使用nodejs搭建服务器之前,我们要先了解nodejs封装好的的几个模块,知道这几个模块简单的使用:如下

  

  接下来开始一步一步搭建的过程,对每一步搭建,提出现在的缺点,在进而继续修改,直到大体完成的功能较为全面的服务器:

(1)服务器的本职就是被其他人访问。当客户端请求服务器,服务器并把信息返还给客户端的过程中,双方要共同遵守http协议。nodejs已经帮我们把http协议封装为模块,我们引入便可以方便使用,即使你对http协议理解的还是很透彻也可以拿来就用。

a、引入http模块:var http = require('http');

b、调用http模块的createServer()方法来创建一个服务器。createServer()方法的参数是一个回调函数,如:(同时解释一下为什么使用回调函数)

     

c、创建监听

服务器必须永远运行,因为请求人很多,不保证在什么时间,所有只要有人请求,服务器就必须做出响应的回应。这样服务器就得永远的运行了。

服务是需要的监听的,服务器就类似一个超市,超市门口必须有个人来迎接客人,收钱,送客人。而服务器的监听就相当于那个随之恭候的人。

server.listen();

d、创建监听,需要有个端口号

一个服务器对外是会提供很多服务的,如web服务,邮件服务,游戏服务等。所以可以端来请求服务器时,需要

告诉服务器,我需要的是什么服务,这就要通过端口号来限制了。

一般来说有几个固定的默认端口号:

当然,端口号是我们可以随意改变,你看哪个数字顺眼,就可以使用什么最为端口号。

server.listen(8080);

第一阶段代码如下:

var http = require('http');
var fs = require('fs');
var urlLib =require('url');
var querystring = require('querystring');

var server = http.createServer(function(req,res){
  console.log('有人链接我了');
  res.write("aaaa");
  res.end();
});

server.listen(8080);
上面程序处理最大的一个不足是:服务器不管客户端要的是什么都会给在页面上显示aaa,这跟一个老师不管学生是

什么阶层的,都交1+1=2是一样的。

你一个服务器有责任判断出客户端要的是什么,之后根据客户端要的内容,去返回,不可以乱返回。(那就跟听不懂

别人话的人一样,让大家无语,自然大家对它的好感度就没有了)

(2)第二阶段,让服务器可以判断出,客户端的需求是什么,之后根据客户端的需求,去返回内容。

首先,有一个属性返回的是,当前客户端请求的内容(如下图):

其实我们可以通过switch..case方法来判断客户端的需求,可是如果一个网站有很多请求的时候,那是很麻烦的一件事。

这里,我们可以使用fs这个文件操作模块。

和http一样,fs也是nodejs封装的一个模块,我们可以可以直接引入来使用。

先对文件操作中的读文件,和写文件进行下详细的讲解:


使用readFile()和writeFile()的代码实例:

fs.readFile('aaa.txt',function(err,data){
	if(err){
		console.log(err);
	}else{
		console.log(data);
	}

})
fs.writeFile('bbb.txt','我把内容加载bbb.txt中',function(err,data){
console.log(null);
})
第二段改善代码如下:

var http = require('http');
var fs = require('fs');
var urlLib =require('url');
var querystring = require('querystring');

var server = http.createServer(function(req,res){
  var file_name = './www'+req.url;
  fs.readFile(file_name,function(err,data){
  	if(err){
  		res.write(404+"该页面不存在");
  	}else{
  		res.write(data);
  	}
  	res.end();
  })
 
});

server.listen(8080);
第二阶段结束:此时的服务器可以判断出客户端请求的是什么,可以根据需求返回响应数据了,不在瞎返回了。

第三阶段:上面的阶段已经可以根据客户端的请求,而返回东西了。但是服务器还需要接受到客户端发送过来的数据,客户端向客户端提交数据的方法有,form表单、websocket、ajax、jsonp;无论前端以什么方法发送数据,对后台来说都是一样的。后端要的是个结果。不管你传来的方式。不过客户端的请求方式不同,后端的接受方法不太一样。

常用的请求就两种get,post;



GET请求:

我们可以通过对接收过来的url:http://localhost:8080/shenlu.html?me=111&psw=123

可以用req.url.indexOf('?'),split(),等方法将url处理为querysting如:me=111&psw=123类似这样样式。之后

在使用parse方法。

但这么处理是麻烦,所以就在这里就引用过来url模块

代码实例:

//get
  const urlLib =require('url');
  var obj=urlLib.parse(req.url,true);
  var url=obj.pathname;
  var GET=obj.query;
  console.log(url);
POST请求:

post请求是分段发送的,为什么比一次性发送,而要分段:

1)如果数据量很大,当我们以post方式发送这写大量数据时候,此时其他的数据必须等待。等1G数据发送之后在发送

其他数据。

2)而且网络传输会出错,当一次性发送出去,就仅仅是一个字节出错,所有数据都需要重新发送。但是如果如果是分段

发送,哪个字节出错,我们就可以将哪一段重新发送。

注意两个注册事件,data,end;

data是一段数据达到,发送一段。 end是全部数据到达,要做的事情。

 //post
  var str='';
  req.on('data',function(data){
  	str+=data;
  })
  req.on('end',function(){
  	const POST=querystring.parse(str);
  	console.log(url,GET,POST);
  })

完整代码:

const http = require('http');
const fs = require('fs');
const urlLib =require('url');
const querystring = require('querystring');

var server = http.createServer(function(req,res){
  var file_name = './www'+req.url;
  fs.readFile(file_name,function(err,data){
  	if(err){
  		res.write(404+"该页面不存在");
  	}else{
  		res.write(data);
  	}
  	res.end();
  })
  //get
  const urlLib =require('url');
  var obj=urlLib.parse(req.url,true);
  var url=obj.pathname;
  var GET=obj.query;
  //post
  var str='';
  req.on('data',function(data){
  	str+=data;
  })
  req.on('end',function(){
  	const POST=querystring.parse(str);
  	console.log(url,GET,POST);
  })
});

server.listen(8080);



 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值