首页 > 编程语言 >Node原生开发Web服务器介绍

Node原生开发Web服务器介绍

时间:2022-10-27 01:55:19浏览次数:51  
标签:Node Web http function res req var 服务器 data

 

1.

 

 

  1. 使用Node创建一个HTTP的服务器,并能够接收到客服端发来的请求
  2. 获取到客服端具体的请求数据,并根据不同的请求数据进行处理
  3. 将处理之后的结果,响应回客户端,并断开本次链接

 

 

 

 

 

 

 

2. Node核心模块http

  1. 创建HTTP服务器
  2. 服务器接受请求并处理
  3. 响应处理结果并断开链接
// 导入http模块
var http =require('http')

// 创建服务器
// 获取到服务器的实例对象
var server=http.createServer()

server.listen(8080,function(){
    console.log('http://127.0.0.1:8080');
})

server.on('request',function(req,res){
    console.log('11111');
    res.write('8888');
    // 断开
    res.end();
})

可以使用nodemon插件,不用点击打开又断开调试,这个根据代码自动更新

 

 

 

3. 服务器响应不同数据类型

server.js

// 导入http模块
var http =require('http')
var fs=require('fs');

// 创建服务器
// 获取到服务器的实例对象
var server=http.createServer()

server.listen(8080,function(){
    console.log('http://127.0.0.1:8080');
})

server.on('request',function(req,res){
    // console.log('11111');
    // // 设置响应头纯文本
    // // res.setHeader('Content-type','text/plain;charset=utf-8')
    // // 设置响应头纯文本,子类型html
    // res.setHeader('Content-type','text/html;charset=utf-8')
    // res.write('<h1>你好</h1>');
    // // 断开
    // res.end();


    // 如果index.html有img图片路劲问题
    if(req.url=='/'){
        fs.readFile('./index.html','utf-8',function(err,data){
            res.write(data);
            res.end();
        })
    }else{
        fs.readFile('./01.jpg',function(err,data){
            res.end(data)
        })
    }
    


})

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>你好啊</h1>
    <img src="./01.jpg" alt="">
</body>
</html>

 

 

 

 

 

 

 

 

 

 

 

 

4. HTTP的不同请求方法的处理

 

 

 

// 导入http模块
var http =require('http')
var fs=require('fs');
var url=require('url')

// 创建服务器
// 获取到服务器的实例对象
var server=http.createServer()

server.listen(8080,function(){
    console.log('http://127.0.0.1:8080');
})

server.on('request',function(req,res){
    // console.log(req.method);
    // 接受get的参数,请求头传参,在127.0.0.1:8080/user?id=123
    console.log(url.parse(req.url,true).query.id);
    if(req.method=="GET"){
        // req.url
        if(req.url=='/'){
            fs.readFile('./index.html','utf-8',function(err,data){
                res.write(data);
                res.end();
            })
        }else{
            fs.readFile('./01.jpg',function(err,data){
                res.end(data)
            })
        }
    }else if(req.method=="POST"){
        // 通过form表单传递post
        var data=''
        req.on('data',function(d){
            // console.log(d);
            // 处理16进制的值
            data+=d;
        })
        req.on('end',function(){
            console.log(require('querystring').parse(data));
        })
        res.end();
    }

    
    


})

 

 

5.服务器代码模块化拆分

 

 

 新建一个router.js和controller.js

代码如下

server.js

// 导入http模块
var http =require('http')

var router =require('./router');
const { removeListener } = require('process');



// 创建服务器
// 获取到服务器的实例对象
var server=http.createServer()






server.listen(8080,function(){
    console.log('http://127.0.0.1:8080');
})

server.on('request',function(req,res){
    router(req,res)
})

 

router.js

var fs=require('fs');
var url=require('url')
var controller=require('./controller')

module.exports=(req,res)=>{
    console.log(url.parse(req.url,true).query.id);
    if(req.method=="GET"){
        // req.url
        if(req.url=='/'){
            controller.index(res)
        }else{
            fs.readFile('./01.jpg',function(err,data){
                res.end(data)
            })
        }
    }else if(req.method=="POST"){
        // 通过form表单传递post
        var data=''
        req.on('data',function(d){
            // console.log(d);
            // 处理16进制的值
            data+=d;
        })
        req.on('end',function(){
            controller.user(require('querystring').parse(data),res)
        
        })
        res.end();
    }

}

 

controller.js

var fs=require('fs');
const { userInfo } = require('os');

module.exports={
    index(res){
        fs.readFile('./index.html','utf-8',function(err,data){
            res.write(data);
            res.end();
        })
    },

    user(postDate,res){
        // 业务逻辑代码
        console.log(postDate);
    }
}

 

 

 

 

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>你好啊</h1>
    <img src="./01.jpg" alt="">
    <form action="./" method="post">
        <input type="text" name="username">
        <input type="text" name="age">
        <input type="submit" value="post提交">
    </form>
</body>
</html>

 

标签:Node,Web,http,function,res,req,var,服务器,data
From: https://www.cnblogs.com/hechunfeng/p/16826992.html

相关文章

  • 存储交换机 服务器的组网
    存储的两个控制框冗余。。a控,b控连接同一个交换机 。。再来a控b控连接另外一个。。。。服务器再连接交换机。。  ......
  • javaweb画图
    最近都在忙期中考试,写博客的频率有点低了,以下是一些基本代码,是王建民老师说的要建立自己的资料库,我直接建的资料库。画图html<!--定义表格宽度行距宽度<tr>行<td>......
  • web自动化-----------报错 Element * is not clickable at point,Other element would
     出现报错Otherelementwouldreceivetheclick:的原因是;当你selenium中click()点击事件时,所选中的标签被外部div吸收了,因此解决办法就是进入里面进行点击操作。dr......
  • Android开发页面重定向导致WebvView.canGoBack一直返回true的解决方法
    Android开发页面重定向导致WebvView.canGoBack一直返回true的解决方法原因:打开页面A的时候重定向到页面B,页面B回退的时候回退到页面A,但是接着又重定向到页面B,所以canGoB......
  • AutoMapper在.Net Core WebApi中使用
    在.NetCoreWebApi里使用AutoMapper1.安装AutoMapper管理包 注意:service层中安装WebApi层也需要安装因为Webpi层有时候也需要用到Dto 2.startup在Configure......
  • 超高性价比的云服务器-华为云耀云服务器
    超高性价比的云服务器-华为云云耀云服务器自从国家鼓励个人创业,大学生自主创业以来,大批的中小企业开始像雨后春笋般涌现。近年来随着时代的发展,中小企业们又迅速推动自身的......
  • Windows随意切换node版本
    第一步:先清空本地安装的node.js版本windows11 完全删除node.js1.清空本地缓存打开cmd命令行窗口,输入npmcacheclean--force回车执行......
  • 超高性价比的云服务器-华为云耀云服务器
    超高性价比的云服务器-华为云云耀云服务器自从国家鼓励个人创业,大学生自主创业以来,大批的中小企业开始像雨后春笋般涌现。近年来随着时代的发展,中小企业们又迅速推动自身......
  • web入门
    目录web1web2web3web4web5web6web7web8web9web10web11web12web13web14web15web16web17web18web19web20尽管之前已经学了一段时间web,但还是深感基础不牢,所以现在就当作0基......
  • 基于windows系统使用GNVM进行node切换版本
    GNVM是什么?GNVM是一个简单的Windows下Node.js多版本管理器,类似的nvmnvmwnodist。安装进入官网,下载你所需要的包,直达链接下载完成放到我们的node环境包下,点......