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

xiaoxiao2021-02-28  148

既然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);

 

转载请注明原文地址: https://www.6miu.com/read-41199.html

最新回复(0)