我们可以使用Node非常轻松的构建一个Web服务器,在Node中专门提供了一个核心模块:http,http这个模块的职责就是帮你创建编写服务器的
文章目录
- 一:简单的http服务
- 1.加载http核心模块
- 2.使用http.createServer()方法创建一个Web服务器,返回一个Server实例
- 3.服务器要干嘛?
- 4.绑定端口号,启动服务器
- 5.端口号的概念
- 二:发送响应
- 三:结合url根据不同请求路径返回不同数据
- 1.获取请求路径
- 2.判断路径处理响应
一:简单的http服务
1.加载http核心模块
var http=require('http')
2.使用http.createServer()方法创建一个Web服务器,返回一个Server实例
var server=http.createServer()
3.服务器要干嘛?
提供服务:对数据的服务,发请求,接受请求,处理请求,发送响应,注册request请求事件,当客户端请求过来,就会自动触发服务器的request请求事件,然后执行第二个参数,回调处理
server.on('request',function(){
console.log('收到客户端的请求了')
})
4.绑定端口号,启动服务器
(端口号也可以是其他,比如80,如果是80则不用手动输入80了 直接127.0.0.1,端口号若是3000,则需要输入127.0.0.1:3000/)
server.listen(3000,function(){
console.log('服务器启动成功了,可以通过http://127.0.0.1:3000/来进行访问')
})
总代码:
var http=require('http');
var server=http.createServer();
server.on('request',function(){
console.log("收到客户端的请求了");
})
server.listen(3000,function(){
console.log('服务器启动成功了,可以通过http://127.0.0.1:3000/来进行访问');
})
要想看服务器是否启动成功,将网址http://127.0.0.1:3000/输入到浏览器
在浏览器输入网址之后,终端会打印出收到请求了
如何关闭服务器呢?
在终端ctrl+c
注意:代码修改之后,要重启服务器,也就是关闭服务器再打开(终端输入node+文件名)才能生效
5.端口号的概念
1.所有联网的程序都需要进行网络通信
2.计算机中只有一个物理网卡,而且同一个局域网中,网卡的地址必须是唯一的
3.网卡是通过唯一的ip地址来进行定位的
IP地址用来定位计算机
4.端口号用来定位具体的应用程序(所有需要联网通信的软件都会占用一个端口号)
5.在计算机中有一些默认端口号,最好不要去使用,例如http服务的80,我们在开发中使用一些简单好记的就可以了,例如3000,5000等没什么含义
6.可以同时开启多个服务,但一定要确保不同服务占用的端口号不一致才可以
二:发送响应
request:请求事件处理函数,需要接受两个参数
1:request请求对象:请求对象可以用来获取客户端的一些请求信息,例如请求路径
比如在端口号加个a
2:response响应对象:响应对象可以用来给客户端发送响应消息
res.end()响应内容只能是二进制或者字符串
var http=require('http');
var server=http.createServer();
server.on('request',function(request,response){
console.log("收到客户端的请求了,请求路径是:"+request.url);
//response对象有一个方法,write可以用来给客户端发送响应数据
//write可以使用多次,但是最后一次一定要使用end来结束相应,否则客户端会一直等待
response.write('hello');
//告诉客户端,我的话说完了,你可以呈递给用户了
response.end();
})
server.listen(3000,function(){
console.log('服务器启动成功了,可以通过http://127.0.0.1:3000/来进行访问');
})
由于我们现在的服务器的能力还非常弱,无论什么请求,只能响应简单的比如hello
我们希望当请求不同的路径的时候响应不同的结果‘例如:
/index
/login登录
/register注册
代码中的 console.log("收到客户端的请求了,请求路径是:"+request.url);
,可以使用if url…判断来选择是登录还是注册等
有时候终端出现/favicon.ico,这是图标的意思,浏览器自己的行为
三:结合url根据不同请求路径返回不同数据
1.获取请求路径
var http=require('http');
//1.创建Server
var server=http.createServer();
//2.监听request请求事件,设置请求处理函数
server.on('request',function(req,res){//简写两个参数
console.log('收到请求了,请求路径是:'+req.url);
console.log('请求我的客户端端口号是:'+req.socket.remotePort);
//之前的方法太复杂,可以直接end的同时发送响应数据
// res.end('hello');
/*
根据不同的请求路径发送不同的响应结果
1.获取请求路径
req.url获取到的是端口号之后的那一部分
也就是说所有的url都是以/开头
2.判断路径处理响应
*/
var url=req.url;
res.end(url);
})
//3.绑定端口号,启动服务
server.listen(3000,function(){
console.log('服务器启动成功,可以访问了');
})
在浏览器url端口号后面输入/a
2.判断路径处理响应
var http=require('http');
//1.创建Server
var server=http.createServer();
//2.监听request请求事件,设置请求处理函数
server.on('request',function(req,res){//简写两个参数
console.log('收到请求了,请求路径是:'+req.url);
//之前的方法太复杂,可以直接end的同时发送响应数据
// res.end('hello');
/*
根据不同的请求路径发送不同的响应结果
1.获取请求路径
req.url获取到的是端口号之后的那一部分
也就是说所有的url都是以/开头
2.判断路径处理响应
*/
var url=req.url;
if(url==='/'){
res.end('index page');//首页
}else if(url==='/login'){
res.end('login page');
}else{
res.end('404 Not Found');
}
})
//3.绑定端口号,启动服务
server.listen(3000,function(){
console.log('服务器启动成功,可以访问了');
})
由于res.end()响应内容只能是二进制或者字符串,如果数据是JSON数据的话,如何把数组转换成字符串呢
var http=require('http');
//1.创建Server
var server=http.createServer();
//2.监听request请求事件,设置请求处理函数
server.on('request',function(req,res){//简写两个参数
console.log('收到请求了,请求路径是:'+req.url);
var url=req.url;
if(url==='/products')
{
var products=[
{
name:'苹果',
price:10
},
{
name:'梨子',
price:10
},
{
name:'榴莲',
price:10
}
]
res.end(JSON.stringify(products))
}
})
//3.绑定端口号,启动服务
server.listen(3000,function(){
console.log('服务器启动成功,可以访问了');
})