node怎么读写文件 ,如何用node开启一个服务

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端口监听中~~");
})

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值