node 文件操作

node 读取文件内容

// 引入文件模块

let fs = require("fs")

// 读取文件内容  

/*

  参数

  1.(必选) 要读取的文件路径

  2.(可选) 编码方式及其他

  3.回调函数  回调函数有收到俩个参数,是错误和文件内容

*/
fs.readFile("../三栏布局.txt",function(err,file){

  console.log(err);

  console.log(file.toString());

})

node 写入文件

let fs = require("fs")
// fs.writeFile 方法向文件中写入内容,路径正确文件不存在会自动创建,路径不正确报错

/**
 * 参数
 * 1.要写入的文件路径
 * 2.要写入的内容
 * 3.编码方式及其他 
 * 4.回调函数
 * */
fs.writeFile("./2.txt","我爱你",function(err,file){
    if(!err){
        console.log(file);
    }else{
        console.log(err);
    }
})

node 实现成绩整理案例

需求:将chengji.txt


a=100 b=90 c=80 d=70


整理为


a:100 b:90 c:80 d:70


代码实现

let fs = require("fs")

fs.readFile("./chengji.txt",function(err,file){
    if(err){
        console.log("出错了"+err);
    }else{
        let newArr = []
        file.toString().split(" ").forEach(item => {
            newArr.push(item.replace('=',':'))
        })
        const newStr = newArr.join('\r\n')
        fs.writeFile('./newChengji.txt',newStr,function(err){
            if(!err){
                console.log("写入成功!");
            }else{
                console.log(err);
            }
        })
    }
})

node path

path.join方法

由于在读写文件时写相对路径会存在问题,用绝对路径解决代码可移植性差可使用该方法

let path = require('path')

let fs = require('fs')

// 该方法用于拼接路径  
let str = path.join('/a','/b','/c')

console.log(str);  //  /a/b/c

// __dirname表示当前文件所在目录
fs.readFile(path.join(__dirname,'chengji.txt'),function(err,file){
    if(err){
        console.log(err);
    }else{
        console.log(file.toString());
    }
})

path.basename方法

let path = require("path")
let str = "./a/b/n/index.html"

/**
 * 参数
 * 1.路径字符串
 * 2.文件后缀(可选   加该参数可以去掉文件后缀 ) */
let newstr = path.basename(str,'.html')
console.log(newstr);

// 可以获得路径文件的后缀
let hz = path.extname(str)
console.log(hz);

内嵌的html文件实现代码分离

需求:将test.html分离为js css 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>
    
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .box{
            width: 300px;
            height: 200px;
            margin: 100px auto;
            border-radius: 8px;
            background-color: pink;
        }
    </style>
</head>
<body>
    <div class="box"></div>

    <script>
        let box = document.querySelector(".box")
        setInterval(()=>{
            box.innerText = box.innerText + "l love you !"
        },3000)
    </script>
   
</body>
</html>

代码实现

let fs = require("fs")
let path = require("path")


// 匹配正则

let pipeiScript = /<script>[\s,\S]*<\/script>/
let pipeiStyle = /<style>[\s,\S]*<\/style>/


// 读取文件
fs.readFile(path.join(__dirname, "./text.html"), 'utf8', function (err, file) {
    if (err) {
        return console.log("读取失败" + err);
    }


    // 分离script的方法
    function fengliScript(fileStr) {
        let a = pipeiScript.exec(fileStr)
        let res = a[0].replace('<script>','').replace('</script>','')
        fs.writeFile(path.join(__dirname,"./daimafengli/script.js"),res,function(err){
            if(err){
                return console.log("script文件写入失败!"+ err);
            }
            else{
                console.log("script文件写入成功!")
            }
        })
    }

    // 分离Style方法
    function fengliStyle(fileStr) {
        let a = pipeiStyle.exec(fileStr)
        let res = a[0].replace('<style>','').replace('</style>','')
        fs.writeFile(path.join(__dirname,"./daimafengli/style.css"),res,function(err){
            if(err){
                return console.log("style文件写入失败!"+ err);
            }
            else{
                console.log("style文件写入成功!")
            }
        })
    }


    // 分离Html方法
    function fengliHtml(fileStr) {
        let res = fileStr.replace(pipeiStyle.exec(fileStr)[0],'<link rel="stylesheet" href="./style.css">').replace(pipeiScript.exec(fileStr)[0],' <script src="./script.js"></script>')
        fs.writeFile(path.join(__dirname,"./daimafengli/html.html"),res,function(err){
            if(err){
                return console.log("html文件写入失败!"+ err);
            }
            else{
                console.log("html文件写入成功!")
            }
        })
    }

    fengliScript(file)
    fengliStyle(file)
    fengliHtml(file)
    
})

node http

node实例一个服务

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

// 创建服务器实例

let server = http.createServer()


// 绑定事件 

server.on('request',(req,res)=>{
    console.log("服务器被请求!");
})

// 开启服务器

server.listen(8000,()=>{
    console.log("服务器开启,8000端口监听中~~~");
})

req和res参数

req可以获得客户端请求的信息

req.url获取客户端请求的地址

req.method可以获得客户端请求的方式

res.end可以设置响应

res.setHeader可以设置响应头

node 响应乱码解决

响应中文会出现乱码问题

解决办法加一下响应头:

res.setHeader('Content-type','text/html;charset=utf-8')

const http = require("http")

const server = http.createServer()

server.on('request',(req,res)=>{
    console.log(`请求的地址时${req.url},请求的方式时${req.method}`);

    res.setHeader('Content-type','text/html;charset=utf-8')
    res.end('我爱你')
})

server.listen(8000,()=>{
    console.log("服务已经启动,8000端口监听中~~");
})

node开启一个响应网页的服务

let fs = require('fs')
let path = require('path')
let http = require('http')

// 创建服务实例 
const server = http.createServer()

// 绑定事件
server.on("request",(req,res)=>{
    console.log("服务器被请求!");
    const url = req.url  //获取用户输入的地址
    let fpath = ''
    if(url == "/"){   //当请求根目录时定位到网页所在目录
        fpath = path.join(__dirname,"./daimafengli/html.html")
    }else{
        fpath = path.join(__dirname,'/daimafengli',url)
    }
    fs.readFile(fpath,'utf8',(err,data)=>{
        if(err) return console.log('读取失败!'+err);
        res.end(data)
    })
})

// 开启服务
server.listen(8000,()=>{
    console.log("服务开启成功,8000端口监听中~~");
})