04-node.js中url根据不同的请求路径发送不同的响应结果、如何解决服务器乱码问题、解析html标签、读取html并通过服务器发送给客户端、读取图片等其他文件并通过服务器发送给客户端

这是我学习node的整理笔记。是我对各个视频和文档的综合理解,以备我日后复习存储。如果有错误的地方,还请各位大佬多多赐教

一、 request.url根据不同的请求路径发送不同的响应结果

request.url :可以用来获取客户端请求路径

注意:

  1. request.url 路径必须是相对路径,以 ./ 开头

  2. 可以利用request.url 根据不同的请求路径发送不同的响应结果

实例如下:

var http = require('http');

var server = http.createServer();

server.on("request", function(req, res) {
    /**
     *  根据不同的请求路径发送不同的响应结果
     *      1、获取请求路径
     *          req.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.");
    }
});

server.listen(3300, function() {
    console.log('服务器启动成功了');
});

在这里插入图片描述

二、解决 node 服务器中文乱码问题

当我们出现中文乱码时,可以引入以下代码

res.setHeader('Content-Type', 'text/plain; charset=utf8');

乱码的原因服务器端默认发送的数据是utf8编码的内容。但是浏览器不知道你是utf8编码的内容。浏览器在不知道服务器响应内容编码的情况下会按照当前操作系统默认的编码去解析,中文操作系统默认的是gbk编码内容。解决方法就是正确告诉浏览器我发的编码是什么内容即以上代码。

代码示例:

var http = require('http');

var server = http.createServer();

server.on("request", function(req, res) {
    var url = req.url;
    if (url === '/products') {
        var products = [{
                name: '苹果',
                price: 1.99
            },
            {
                name: '香蕉',
                price: 2.99
            }, {
                name: '黄瓜',
                price: 1.99
            }
        ]
        res.setHeader('Content-Type', 'text/plain; charset=utf8');
        //注意响应的内容只能是二进制数据或字符串
        res.end(JSON.stringify(products, null, 2));
    } else {
        res.end("404 Not Found.");
    }

});

server.listen(3330, function() {
    console.log('服务器启动成功了');
});

在这里插入图片描述

三、node解析html标签

方法一:如果是html页面的中文乱码,我们也可以直接给html加上以下标签

<meta charset="utf-8">

方法二:当我们出现html标签中的内容乱码时,可以引入以下代码

res.setHeader('Content-Type', 'text/html; charset=utf8');

Content-Type:在 http 协议中,用来告诉浏览器我给你发送的数据类型
text/html:是用来告诉浏览器我给你发送html文本
text/plain:是用来告诉浏览器我给你发送普通文本

代码示例:


var http = require('http');

var server = http.createServer();

server.on('request', function(req, res) {
    var url = req.url;

    if (url === '/plain') {
        res.setHeader('Content-Type', 'text/plain; charset=utf8');
        res.end('<p>hello!<a>你好!</a></p>');
    } else if (url === '/html') {
        res.setHeader('Content-Type', 'text/html; charset=utf8');
        res.end('<p>hello!<a>你好!</a></p>');
    }

});

server.listen(3000, function() {
    console.log('服务器启动成功,可以访问了!');
});

在这里插入图片描述

四、node读取html并通过服务器发送给客户端

要想通过node读取html并通过服务器发送给客户端,我们需要以下两步

  1. 搭建服务器
  2. 读取html文件并发数给客户端
    需要注意加上以下代码,防止读取文件时乱码
 res.setHeader('Content-Type', 'text/html; charset=utf8');

示例如下,这是我的文件存储目录
在这里插入图片描述
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>2022年考研倒计时</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        html,
        body {
            width: 100wh;
            height: 100vh;
            position: relative;
        }
        
        #countdown {
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            width: 50rem;
            text-align: center;
            font-size: 70px;
            font-weight: bolder;
        }
        
        #countdown span {
            display: block;
            color: red;
        }
    </style>
</head>

<body>
    <div id="countdown">
        距离2022年考研倒计时
        <span></span>
    </div>
    <script>
        //gex为考研时间
        let countdown = document.querySelector("#countdown span"),
            gex = new Date("2021/12/25");

        function gexTime() {
            //距离考研倒计时秒(相对于1970年1月1日00时0分0秒0毫秒)
            //天 时 分 秒
            let time = gex - Date.now(),
                ss = addZero(Math.floor((time / 1000) % 60)),
                mm = addZero(Math.floor((time / 60000) % 60)),
                hh = addZero(Math.floor((time / 3600000) % 24)),
                DD = Math.floor(time / 86400000);
            countdown.innerHTML = `${DD}${hh}${mm}${ss}秒`;
        }

        function addZero(n) {
            return n < 10 ? "0" + n : n + "";
        }
        gexTime();
        setInterval(gexTime, 1000);
    </script>
</body>

</html>

node.js部分:

var fs = require('fs');
var http = require('http');

var server = http.createServer();

server.on('request', function(req, res) {
    var url = req.url;

    if (url === '/index') {
        fs.readFile('../index.html', function(error, data) {
            if (error) {
                res.setHeader('Content-Type', 'text/html; charset=utf8');
                console.log("文件读取失败,请稍后再试!");
            } else {
                res.setHeader('Content-Type', 'text/html; charset=utf8');
                res.end(data);
            }
        });
    }
});

server.listen(3000, function() {
    console.log("服务器启动成功!");
})

运行结果:
在这里插入图片描述

五、node读取图片等其他文件并通过服务器发送给客户端

要想通过node读取图片等其他文件并通过服务器发送给客户端,我们需要以下两步

  1. 搭建服务器
  2. 读取图片等其他文件并发数给客户端

注意:当我们读取其他文件的时候,为保证不会出现错误,我们必须加上以下代码,其中’Content-Type’后跟的是文件类型,不同文件的类型不一样 。jpg 图片的是 image/jpeg 。更多类型详情

res.setHeader('Content-Type', 'image/jpeg');

示例如下,这是我的文件存储目录:
在这里插入图片描述

node.js部分:

var fs = require('fs');
var http = require('http');

var server = http.createServer();

server.on('request', function(req, res) {
    var url = req.url;

    if (url === '/img') {
        fs.readFile('../img/1.jpg', function(error, data) {
            if (error) {
                res.setHeader('Content-Type', 'image/jpeg');
                console.log("图片读取失败,请稍后再试!");
            } else {
                //图片就不需要指定字符编码了,我们说的字符编码是字符
                res.setHeader('Content-Type', 'image/jpeg');
                res.end(data);
            }
        });
    }
});

server.listen(3000, function() {
    console.log("服务器启动成功!");
})

运行结果:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值