<node.js学习笔记(4)>stream和http模块

1.stream流

获取模块 const fs = require("fs")

  1. 读取流 fs.createReadStream(a)
    参数a:读取的文件路径,返回一个对象
    流有两种状态: 暂停和释放

demo

const read = fs.createReadStream("./sjl.txt"); //读取流
let str = "";
read.setEncoding("utf8"); //设置字符集
// read.resume(); 改变流的状态为释放状态,让它开始动起来  
//read中的内置事件
//设置流状态为释放状态,回调中的第一个形参为读取的数据
read.on("data", (data) =>{
    str = data;
});
//流释放完毕后,触发end事件中的回调
read.on("end", ()=>{
    console.log(str)
![](https://user-gold-cdn.xitu.io/2018/12/11/1679bfa086c05c90?w=280&h=51&f=png&s=9409)
    console.log("读取结束");
})
复制代码

效果: 读取sjl.txt中的内容

2.fs.appenfFile和fs.appendFileSync

前者通过异步的方式将文本内容或数据添加到文件里,如果文件不存在会自动创建。

fs.appendFile("./sjl2.txt", "sjl", "utf8", (err) => {
    console.log(err);
});
复制代码

后者通过同步的方式将文本内容或数据添加到文件里,文件不存在则自动创建。

  1. 可写流 fs.createWriteStream(a)
    参数a:写入的文件的路径
const write = fs.createWriteStream("./sjl2.txt");
write.write("11111");
复制代码
//管道 pipe
const read = fs.createReadStream("./sjl.txt");
const write = fs.createWriteStream("./sjl2.txt");
read.pipe(write); //将sjl.txt的内容给予sjl2.txt,相当于复制文件
复制代码
创建一个可读流的构造函数
const Readable = require("stream").Readable;  //得到可读流的构造函数/类
const read = new Readable(); //创建一个可读流对象
read.setEncoding("utf8");
read.push("123");
read.push("456");
read.push("789");  //放数据
read.push(null); //数据放完了
read.on("data", data => {
    console.log(data);
});
复制代码

效果:

2.http

引入模块const http = require("http");

创建一个服务
const http = require("http");
//创建一个服务
const server = http.createServer((req, res)=>{
    /*
        1. req: 请求体对象
        2. res: 响应体对象,后台给客户端的响应
    */
    //设置响应头(状态码,响应内容类型)
    res.writeHead(200, {
        "Content-Type" : "text/html;charset=utf-8"
    });
    //text/plain :纯文本    text/html:标签 
    res.write("返回的数据"); //向客户端返回数据,可调用无数次
    res.end(""); //响应结束
    //write和end中参数必须是string或者Buffer对象
});
srever.listen(3000, ()=>{
    console.log("服务监听在localhost 3000端口")
}); //监听3000端口
复制代码
a) req中的一些属性
const http = require("http"); 
//创建一个服务
const server = http.createServer((req, res) => {
    // req 请求体对象    res:响应体对象
    req.url;     //路由
    req.method;  //方法 "GET","POST"
    req.headers; //请求头内容
});
//监听端口号
server.listen(3000);
console.log("开始监听3000端口"); 
复制代码
b) 通过不用路径显示不同的内容
const http = require("http");
//创建一个服务
const server = http.createServer((req, res) => {
    if (req.url !== "/favicon.ico") { //拒绝图标请求
        if (req.method === "GET") { //设置方法
            res.writeHead(200, {
                "Content-Type": "text/html;charset=utf-8"
            });
            switch (req.url) {
                case "/sjl":
                    res.write("<div>sjl</div>");
                    break;
                case "/":
                    res.write("<div>根目录</div>");
                    break;
                default:
                res.write("<div>没有符合要求的</div>");
                    break;
            }
        }
    }

    res.end();
});
//监听端口号
server.listen(3000);

复制代码

访问localhost:3000 的效果图:

c)通过不用路径显示不同的页面

新建两个html文件 a.html和b.html

  1. 异步写法
const http = require("http");
const fs = require("fs");
//创建一个服务
const server = http.createServer((req, res) => {
        if (req.method === "GET") {
            res.writeHead(200, {
                "Content-Type": "text/html;charset=utf-8"
            });
            switch (req.url) {
                case "/sjl":
                    fs.readFile("./01.html", "utf8", (err, data) => {
                        res.write(data);
                        res.end();
                    }); 
                    break;
                default:
                    fs.readFile("./default.html", "utf8", (err, data) => {
                        res.write(data);
                        res.end();
                    }); 
                    break;
            }
        }
});
//监听端口号
server.listen(3000);
console.log("开始监听3000端口");
复制代码
  1. 同步写法
const http = require("http");
const fs = require("fs");
const server = http.createServer((req, res) => {
        if (req.method === "GET") {
            res.writeHead(200, {
                "Content-Type": "text/html;charset=utf-8"
            });
            switch (req.url) {
                case "/sjl":
                    res.write(fs.readFileSync("./01.html", "utf8"));
                    break;
                default:
                    res.write(fs.readFileSync("./default.html", "utf8"));
                    break;
            }
        }
    res.end();
});
//监听端口号
server.listen(3000);
console.log("开始监听3000端口");
复制代码

效果图:


d)ajax传数据

创建一个html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ajax案例</title>
    <style>
        *{margin:0;padding:0;}
        li{list-style:none;}
        a{text-decoration: none;}
        #wrap{
            width:200px;
            height:200px;
            background-color:#f66;
        }
    </style>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
    <div id="wrap">ajax案例</div>
    <script>
        $("#wrap").click(() => {
            $.ajax({
                url : "http://127.0.0.1:3000",
                method : "get",
                success : function(msg){
                    console.log(msg);
                }
            });
        });
    </script>
</body>
</html>
复制代码

创建http服务,获取数据

const http = require("http");
const server = http.createServer((req, res) => {
    //设置允许跨域,CROS跨域
    res.setHeader("access-control-allow-origin", "*");
    res.write("传出的数据");
    console.log(15326235135);
    res.end();
});
server.listen(3000);
console.log("开始监听3000端口");
复制代码

点击页面时效果:

转载于:https://juejin.im/post/5c0f575f6fb9a049d61d60ec

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值