node课程

4 篇文章 0 订阅
2 篇文章 0 订阅

一 node简介

node属于服务器端的语言,服务端:javascript,V8引擎运行,性能很快,直接运行js到服务器端。
http模块:服务器http协议模块;
url模块:路径解析模块,使用parse 方法解析路径;

二 创建服务器

  1. req: 服务端路径相关信息;
  2. res :浏览器的响应信息;
  3. 设置http的响应头:
    参数1: 服务器的响应状态 :200:成功 、 500 :服务器报错;
  4. 通过parse 方法直接将query上的传值解析为json,
    设置parse方法参数2为true自动将query解析为json;
  5. req.url:输出服务器端的路径,这种解析就是前端的get传值;
let http=require("http"); //加载http模块
let url=require("url")  //加载url模块   使用parse 方法解析路径

let server=http.createServer((req,res)=>{
    res.writeHead(200,{"Content-Type":"text/html;charset=utf-8;"});
    // 在服务器  解析一个路径
    //let location="http://www.maodou.com?name=张三&id=10086"
    //通过parse 方法  解析路径 
    //let pathName=url.parse(location,true);
    // 服务端写入数据
    //res.write(JSON.stringify(pathName.query));
    let path=url.parse(req.url,true);
    //下面代码可以直接解析出服务器路径上的传值
    res.write(JSON.stringify(path.query));
    res.end(()=>{
        console.log("服务器响应结束");
    });
}).listen(8000,'127.0.0.1',()=>{
    // loaclhost   127.0.0.1
    console.log("http://localhost:8000");
});
  1. module.exports=server;:将服务端模块暴露出去;
module.exports = (callback) => {
    http.createServer((req, res) => {
        callback(req,res);
    }).listen(8000, '127.0.0.1', () => {
        console.log("http://127.0.0.1:8000");
    });
};

不使用相对路径去找,node会自动找node_modules下的文件,如:

let server = require("createServer");

这里有一个问题:node_modules文件存在文件夹,获取文件里面的文件服务端会报错,找不到文件。如何处理:去对应的文件夹下生产配置文件,直接获取文件名称:

let user = require("data");

cnpm init --yes 强制生成

三 关于文件的操作

  1. Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。异步读取参数包括: url 、option 、{encoding:’’,flag:’’} 、callback。异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。
    建议大家使用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞。
let fs = require('fs');//加载文件系统模块
module.exports = {
    readfile() {
        //异步读取文件
        let url = "./page/stu.txt";//给出需要读取的文件路径
        fs.readFile(url, (error, data) => {
            if (error) {
                throw error
            }
            console.log(data.toString());
        });
    }
}

data 返回的数据格式是buffer格式,buffer 转化字符串:toString()
同步读取方法:

let data=fs.readFileSync(url).toString();
console.log(data);
  1. 文件读取的方法调用:fs.readfile();
  2. 检测是文件还是目录:fs.stat();
    stats.isFile() :如果是文件返回 true,否则返回 false;
    stats.isDirectory():如果是目录返回 true,否则返回 false;
stat() {
        //判断是否是目录还是文件
        //异步方法
        fs.stat('./comment', (err, stats) => {
            if (err) {
                throw err;
            }
            console.log(stats.isFile());
            console.log(stats.isDirectory());
        });
  1. 打开文件 :open ;
    r+ :可读可写;
    r :可读 ;
    fd : 是number;
    关闭文件:close;
fs.open('./comment/router', 'r+', (err, fd) => {
            if (err) {
                throw err;
            }
            console.log("文件以打开");
            console.log("这里在操作");

            //关闭文件
            fs.close(fd, (err) => {
                if (err) {
                    console.log("关闭失败");
                    return;
                }
                console.log("关闭成功!");
            });
  1. 创建文件 :mkdir 。创建目录 一般用于文件上传;
  2. 移除目录:rmdir;
 fs.mkdir("./comment/user", (err) => {
            if (err) {
                console.log("文件已存在!");
                //移除目录
                fs.rmdir('./comment/user',(error)=>{
                    if(error){
                        console.log("删除目录失败");
                        return;
                    }
                    console.log("删除成功!");
                });
                return;
            }
            console.log("创建文件成功!");
        });
  1. writeFile :写入文件, 写入之后会覆盖之前的内容;
  2. appendFile:写入追加;
  3. unlink、rmdir:单文件删除;
fs.unlink('./page/stu.txt', (err) => {
            if (err) {
                console.log("删除失败!");
                return;
            }
            console.log("删除成功!");
        });
fs.rmdir('./page', (err) => {
            if (err) {
                console.log("删除失败!");
                return;
            }
            console.log("删除成功!");
        });
    }

node里面的文件流

(一)读取流

  1. 读取流:let data="",接收读取的数据;
  2. 创建读取流:
let readStream=fs.createReadStream('public/jq.txt',{flags:'r+',encoding:'utf-8',start:0,end:1024});
  1. 设置读取流的编码格式:
readStream.setEncoding('utf-8');
  1. 使用流的监听事件 去监听:
readStream.on('data',(res)=>{
 //当有数据可读的时候触发
 data+=res;
});

readStream.on('end',()=>{
    //当没有数据可读的时候
    //console.log(data);
    //创建写入
    let writeStream=fs.createWriteStream('public/data.txt',{flags:'r+',encoding:'utf-8'});
    writeStream.write(data);
});

readStream.on('error',(err)=>{
    //读取或者写入的时候触发事件
    console.log(err);
});

(二)写入流

  1. 创建写入流:
let writeStream=fs.createWriteStream('public/data.txt');
  1. 设置写入的数据和编码:
writeStream.write('写入流','utf-8');
  1. 写入完成,监听:
writeStream.end();
writeStream.on('finish',()=>{
    console.log('写入完成');
}); 

(三)管道流

管道流:边读边写;

let readStream=fs.createReadStream('public/jq.txt');
let writeStream=fs.createWriteStream('public/data.txt');
//管道
readStream.pipe(writeStream);

(四)链式流

let zib=require('zlib');//文件压缩
fs.createReadStream('public/jq.txt').pipe(zib.createGzip()).pipe(fs.createWriteStream('public/jq.zip'));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值