node.js相关知识点

一、node

1、创建简单的web服务器

2、使用http模块(监听函数  参数: request 请求头  、 response 响应头)

3、监听服务器端口

4、设置服务器响应数据的格式

5、结束当前服务

const http = require('http')
let port = 8000;
let hostname = 'localhost';
const server = http.createServer((req, res) => {
    res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"});
    // res.write("首页");
    // res.end();
    res.write("首页",(err)=>{
        if(err)
        throw err;
    });
    res.end();

});
server.listen(port,()=>{
    console.log(`服务器运行在 http://${hostname}:${port}/`)
})

二、node.js文件系统

1、 文件读取

异步读取(readFile)

第一个参数为路径,第二个参数可写,可不写,不写即为默认,第三个为回调函数

//引入fs文件模块
const fs = require("fs");
const url = require("url");
const http = require('http')
let port = 8000;
let hostname = "localhost";
const server = http.createServer((req, res) => {
    if (req.url != "/favicon.ico") {
        res.setHeader("Content-Type", "text/html;charset=utf8");
        
        try {
            //文件读取(第一个参数为要读取的文件,第二个参数可不写,不写即为默认,第三个为回调函数)
            //下面这个为异步读取
            fs.readFile("./windy/null.txt",{flag:"r+",mode:0666},(err,str)=>{
                if(err)
                throw err;
                //读取的值是buffer组所以要to String
                res.write(str.toString());
                res.end();
            });
        }
        catch (error) {
            throw error;
        }

    }
})
server.listen(port, () => {
    console.log(`服务器运行在 http://${hostname}:${port}/`)
})

其中第二个参数的参数可以是以下值:

Flag描述
r以读取模式打开文件。如果文件不存在抛出异常。
r+以读写模式打开文件。如果文件不存在抛出异常。
rs以同步的方式读取文件。
rs+以同步的方式读取和写入文件。
w以写入模式打开文件,如果文件不存在则创建。
wx类似 'w',但是如果文件路径存在,则文件写入失败。
w+以读写模式打开文件,如果文件不存在则创建。
wx+类似 'w+', 但是如果文件路径存在,则文件读写失败。
a以追加模式打开文件,如果文件不存在则创建。
ax类似 'a', 但是如果文件路径存在,则文件追加失败。
a+以读取追加模式打开文件,如果文件不存在则创建。
ax+类似 'a+', 但是如果文件路径存在,则文件读取追加失败。

同步读取 (readFileSync)

            let str = fs.readFileSync("./windy/null.txt");
            res.write(str.toString());
            res.end();

以上二者的结果一致

结果:因为我在null.txt里写了“等风来”所以读取出来皆为“等风来”

2、文件打开

文件打开(open)

第一个参数为路径,第二个为回调函数

ps:下面这段代码还还是要套在try catch里,为了方便就只写该功能的代码

      fs.open("./windy", (err, fd) => {
                if (err) {
                    console.log("文件打开失败");
                    return
                }
                console.log("文件打开成功", fd);

            });
            res.end();

结果:

3、检测文件信息

检测文件信息

第一个参数为路径,第二个为回调函数

            fs.stat("./windy", (err, stats) => {
                if (err)
                    throw err;
                console.log(stats.isFile());
                console.log(stats.isDirectory());
            });

结果:

4、面试小案例

面试案例:找出一个目录下所有的目录与文件

            let baseurl = "./";
            let basename = "windy";
            let check = (base, name) => {
                let src = base + name;
                fs.stat(src, (err, stats) => {
                    if (err)
                        throw err;
                    if (stats.isDirectory()) {
                        console.log(name, "目录");
                        //目录
                        fs.open(src, (err, fd) => {
                            if (err)
                                throw err;

                            fs.readdir(src, (e, files) => {
                                if (e)
                                    throw e;
                                for (let val of files) {
                                    let url = src + "/";
                                    check(url, val);
                                }
                            });
                        });
                    }
                    else {
                        //文件
                        console.log(name, "文件")
                    }
                })
            }
            check(baseurl, basename);
            res.end();

解析:

上图是我的各个文件位置图,结合代码观看可以方便理解。

1、首先定义一个基本路径,然后检测是否为目录。如果是,输出名字+目录两个字;如果不是直接走else输出名字+文件两个字

以下步骤针对于第一步是目录的情况下

2、接着打开目录(open)

3、读取目录(readdir),这里readdir有两个参数。第一个参数为文件路径,第二个为回调函数,而回调函数里又带有两个参数err,files,第一个为错误信息,第二个为目录下的文件数组列表。

4、读取完之后遍历该数组列表并对其进行递归

5、查找完成

结果:

5、文件写入

在文件写入之前应在文件前面加以下两句代码

        let query = url.parse(req.url, true).query
        let txt = query.content;

 

            fs.writeFile("./windy/spring/cute.txt", txt, { flag: "w", mode: 0666 }, (err) => {
                if (err) {
                    console.log("写入失败");
                }
                else {
                    console.log("写入成功!");
                }
                res.end();
            });

结果:在打开的页面上加?content=....  

然后去找你写入的文件就会看到有你编辑的东西,如下图

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值