在我们上次学到的是,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样式。还有其他的文件 的请求。我们需要的是服务器从的