javascript 高级 -- node.js--http模块高级

在我们上次学到的是,http模块的基础搭建。分为三个步骤。我们来看看我们的基础的http外部搭建的服务器的步骤。

   //引入http模块. 我们需要什么功能就需要引入什么支持的模块。

                 var http = require("http");

// 用http模块来创建服务器的服务。来进行发送服务。接受前端的发过来的数据和返回给前端的数据。

   var server = http.createServer(function(req,res){

             // 这里的req和res是我们的http模块的重要的两个对象,第一个是前端请求对象,第二                  个是服务器的(后端)响应的对象。在这个数据交互成功时,才会触发回调函数,在回调函数里,我们可以传两个参数,req,res来进行操作。架设路由,进行逻辑业务分支判断。

             if(req.url=="/index.html"){   

                  // 这是前端要请求这个文件路径。就进入这个逻辑判断,业务分支进行操作。


                }else if(req.url=="./text.html"){

                //  这是请求的另个分支。

                }

})

//最后一步是让服务器监听端口号进行判断是否启动成功。通过调用listen()方法。

server.listen(8080,function(){

      console.log("success")

})

这是,我们最基础的搭建node.js外部服务器。三个步骤。

我们来更加深入了解一下node.js。首先,我们看一下如何用node.js来接受get请求。在我们很多前端和后端的交互中,get请求是非常重要的,也是最重要的请求方法。因为在get请求中,有个非常重要的地方就是,在接口拼接参数。我们首先要对请求的对象的路径要分清。就是牵涉到接口和参数的分开。所以,要引入的是 url模块。在res返回对象中,我们要进行页面的返回操作。就是要读取服务器的文件,要写入返回前端的res对象中,所以,我们要引入的是,fs模块。我们看一下例子。

//首先还是要引入的是http模块的

var http = require("http");

//要引入的是url模块。

var url =require("url")

//创建服务的发送和响应

var server = http.crateServer(function(req,res){

// 注意:在req对象中,url属性的值也包含着参数,并且是以字符串来进行的。所以,我们要进行转化。用url模块下的parse()的方法来进行转化,其一是分开请求路径和端口。其二是把参数转化为对象格式。可以通过对象点属性的方法进行操作。所以,传入两个参数。req.url和true。

var urlObj = url.parse(req.url,true)  // 然后通过urlObj对象的pathname属性去来进行路由架设。

     if(urlObj.pathname=="/index.html"){     // 这是第一条路由分支,如果前端来访问index.html就走这条路由分支。

                  // 我们服务器(后端)可以通过fs模块来写入res对象中返回前端的数据。

                     fs.createReadSteam("./index.html").pipe(res); 

       }else if(urlObj.pathname=="/index"){  // 这是个端口,如果前端访问这个路由的话,就走这          个逻辑分支,进行操作。假如是表单提交的话(提交方式是:get请求方法,我们可以判断提 交的数据是否符合进行验证。

     if(urlObj.query.user=="123"&&urlObj.query.pass=="321"){

             //我们可以给后台发送一段文字。来作为提示登录的状态。用json的格式来进行返回给前端。

                   res.write('{"des":"登录成功了"}');

                    res.end() // tcp面向协议来进行断开。保证数据的交互成功。在write()方法里,我们需要手动断开。在;pipe()方法里,是不需要断开的。

}else{

                   res.write('{"des":"登录失败了"}');

                  res.end()  // 断开

}

      }

})

//服务器监听端口号.

server.listen(8888,function(){

console.log("success")


})              // 这样的就是前端需要在接受数据时,就需要解析json格式。

// 我们可以比较深入来简化我们的路由分支。在前端我们用的方式是两种。(用ip地址和域名):一种是post 请求。一种是get请求。我们先看看,如果前端用post请求方式我们的node.js服务器.我们看看代码。

// 我们先练习ajax的post请求。

varinpt_one=document.querySelector("#inpt");

varinpt_two=document.querySelector("#inp");

varbtn=document.querySelector("#btn");

// 在点击btn按钮的时候触发的是ajax的post请求。

btn.onclick=function(){

// 创建请求对象。兼容写法。

varxhr=window.XMLHttpRequest ?newXMLHttpRequest() :newActiveXObect("Microsoft.XMLHTTP") ;

// 配置请求方法

xhr.open("POST","http://10.0.153.236:8880/index",true)

// 发送参数。

// 参数的转化。 创建对象的方法来进行。也可以通过获取值的变化来进行拼接到data里面。

vardataObj= {

"user":inpt_one.value,

"pass":inpt_two.value

}

vardata="user="+dataObj.user+"&pass="+dataObj.pass;

xhr.send(data)

// 监听状态。

xhr.onreadystatechange=function() {

if(xhr.readyState==4&&xhr.status==200){

varresultObj=JSON.parse(xhr.responseText)//这是前端来接受后台的数据格式来进行转化。用JSON.parse()来进行转化为严格的json格式。

alert(resultObj.des);

}

}

}


// 我们先练习ajax的post请求。

varinpt_one=document.querySelector("#inpt");

varinpt_two=document.querySelector("#inp");

varbtn=document.querySelector("#btn");

// 在点击btn按钮的时候触发的是ajax的post请求。

btn.onclick=function(){

// 创建请求对象。兼容写法。

varxhr=window.XMLHttpRequest ?newXMLHttpRequest() :newActiveXObect("Microsoft.XMLHTTP") ;

// 配置请求方法

xhr.open("POST","http://10.0.153.236:8880/index",true)

// 发送参数。

// 参数的转化。 创建对象的方法来进行。也可以通过获取值的变化来进行拼接到data里面。

    vardataObj= {

            "user":inpt_one.value,

            "pass":inpt_two.value

}

vardata="user="+dataObj.user+"&pass="+dataObj.pass;

xhr.send(data)

// 监听状态。

xhr.onreadystatechange=function() {

if(xhr.readyState==4&&xhr.status==200){

    var resultObj=JSON.parse(xhr.responseText)//这是前端来接受后台的数据格式来进行转化。       用JSON.parse()来进行转化为严格的json格式。

                   alert(resultObj.des);

        }

    }

}

   我们在前端请求的时候,我们需要请求的其他文件。比如是html的css样式。还有其他的文件 的请求。我们需要的是服务器从的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容