我们可以使用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/来进行访问');
})

node express搭建本地服务器 如何用node搭建服务器_服务器


要想看服务器是否启动成功,将网址http://127.0.0.1:3000/输入到浏览器

在浏览器输入网址之后,终端会打印出收到请求了

node express搭建本地服务器 如何用node搭建服务器_node express搭建本地服务器_02

如何关闭服务器呢?

在终端ctrl+c

注意:代码修改之后,要重启服务器,也就是关闭服务器再打开(终端输入node+文件名)才能生效

5.端口号的概念

1.所有联网的程序都需要进行网络通信
2.计算机中只有一个物理网卡,而且同一个局域网中,网卡的地址必须是唯一的
3.网卡是通过唯一的ip地址来进行定位的
IP地址用来定位计算机
4.端口号用来定位具体的应用程序(所有需要联网通信的软件都会占用一个端口号)
5.在计算机中有一些默认端口号,最好不要去使用,例如http服务的80,我们在开发中使用一些简单好记的就可以了,例如3000,5000等没什么含义
6.可以同时开启多个服务,但一定要确保不同服务占用的端口号不一致才可以

二:发送响应

request:请求事件处理函数,需要接受两个参数

1:request请求对象:请求对象可以用来获取客户端的一些请求信息,例如请求路径

比如在端口号加个a

node express搭建本地服务器 如何用node搭建服务器_服务器_03

node express搭建本地服务器 如何用node搭建服务器_端口号_04


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/来进行访问');
})

node express搭建本地服务器 如何用node搭建服务器_客户端_05


由于我们现在的服务器的能力还非常弱,无论什么请求,只能响应简单的比如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

node express搭建本地服务器 如何用node搭建服务器_端口号_06

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('服务器启动成功,可以访问了');
    
})

node express搭建本地服务器 如何用node搭建服务器_服务器_07


由于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('服务器启动成功,可以访问了');
    
})