node.js

24 篇文章 0 订阅

node.js模块化

之前已经探讨了jquery,现在轮到了Node了,node是一门后端开发语言,比较适合开发高并发式。

1. global模块

require():引入js文件,本地文件要加./,不然他就会去自己的文件库里找的。

require("./02");

如果本地js文件有个变量,那么用require要怎样使用呢,直接引入是没用的。有两个方法:a:挂在全局global(是node的顶层对象)

let a = "hello";
global.a = a;

require("./02");
console.log(a);//打印hello

b:可以使用exports(不会污染全局。还可以根据文件不同可以取不同的名字,避免了重复)返回的是一个对象

let a = "hello";
exports.a = a;

let a = require("./02");
console.log(a)

__dirname:文件的目录的绝对路径

console.log(__dirname);

__filename:文件的绝对路径包括文件名

console.log(__filename);

2. path模块

path.join():拼接路径(不识别根目录)

const path = require("path");
let p =path.join("./a","../b","3.txt");
console.log(p)// b\3.txt

path.resolve():拼接路径(识别根目录)

const path = require("path");
let p =path.resolve("./a","/c","3.txt");
console.log(p)// \c\3.txt

path.relative():返回两个路径之间的相对路径

const path = require("path");
let p = path.relative("c:/a/b","c:/d/c")
console.log(p)// ..\..\d\c

path.parse():解析路径,返回的是一个对象

const path = require("path");
let p = path.parse("/user/3.txt")
console.log(p)// { root: '/', dir: '/user', base: '3.txt', ext: '.txt', name: '3' }

3.url模块

URL类:用来解析所以的路径,返回的是一个对象

const URL = require("url").URL;
let u = new URL("https://editor.csdn.net/md?articleId=107644319");
console.log(u);

4.querystring查询字符串模块

querystring.parse():要解析的url的查询字符串,返回的是一个对象

const querystring = require("querystring");
let q = querystring.parse("articleId=107644319")
console.log(q);// { articleId: '107644319' }

querystring.stringify():要序列化的url对象,返回字符串

const querystring = require("querystring");
let q = querystring.stringify({articleId:"107644319"});
console.log(q);//articleId=107644319

5. events:事件触发器

EventEmitter类:EventEmitter .on():仅处理事件一次,EventEmitter.emit():触发事件

const EventEmitter = require("events").EventEmitter;
let ceshi = new EventEmitter();
let fn = function(){
    console.log("我叫狗蛋");
}
//绑定事件
ceshi.on("goudan",fn);//这个时候是不能执行的,因为还没有触发
//触发事件
ceshi.emit("goudan");//我叫狗蛋

补充:**EventEmitter .on(),EventEmitter.emit()**里面也可以传参数

ceshi.on("dachui",(a,b,c)=>{
    console.log(a + b + c);
});
ceshi.emit("dachui",1,2,3);//6

EventEmitter.off():解绑事件

const EventEmitter = require("events").EventEmitter;
let ceshi = new EventEmitter();
let fn = function(){
    console.log("我叫狗蛋");
}
//绑定事件
ceshi.on("goudan",fn);
//解绑事件
ceshi.off("goudan",fn);
//触发事件
ceshi.emit("goudan");//这个时候触发是没有任何东西的

newListener事件:自动触发,不需要emit触发

const EventEmitter = require("events").EventEmitter;
let ceshi = new EventEmitter();
ceshi.on("newListener",()=>{
    console.log("我自己执行了");//打印:我自己执行了
})

removeListener事件:移除事件

const EventEmitter = require("events").EventEmitter;
let ceshi = new EventEmitter();
ceshi.on("removeListener",()=>{
    console.log("我没有触发");//没有任何东西
})

6. fs文件系统

fs.readFile():读文件:有三个参数,1. 读文件的路径,2.文件格式,3.回调函数

const fs = require("fs");
const path = require("path");
let p = path.join(__dirname,"ceshi")
fs.readFile(p,"utf-8",(err,data)=>{
    console.log(data);
});

注意:fs读写文件是异步操作,那要写同步怎么办呢?别担心,小生代码奉上

const fs = require("fs");
const path = require("path");
let p = path.join(__dirname,"ceshi")
console.log(fs.readFileSync(p, "utf-8"));//同步是没有回调函数的

fs.writeFile():写文件:有4个参数。1.写文件的路径,2.写的内容,3.flag(默认w没有则创建文件,有则阻截。不能创建文件夹),4.回调函数(err的处理)

const fs = require("fs");
let str = "hello";
fs.writeFile("4.txt",str,{flag:"a"},(err)=>{
    console.log(err);
});

提示:要是想在文件的后面追加内容,则把flag的w改成a就行了。详情见flag,这个也是异步操作。同步操作我就不撸代码了,毕竟nod.js强大的一点就是异步

fs.unlink():删除文件,不能删除文件夹和目录,2个参数:1.要删除文件的路径,2.回调函数(err的处理)

const fs = require("fs");
fs.unlink("./1.txt",(err)=>{
    console.log(err);
});

fs.mkdir():创建文件夹:3个参数,1.你要创建文件夹的目录,2.recursive参数为true就可以在不存在的文件夹里在创建一个文件夹,3.回调函数(err)

const fs = require("fs");
fs.mkdir("../img/fs/text",{recursive:true},err => {});

fs.rmdir():删除文件夹:2个参数,1.要删除文件夹的路径,2.err回调函数

const fs = require("fs");
fs.rmdir("../img/fs/text",err => {});

fs.rename():重命名:3个参数,1.旧文件夹的名字,2.新文件夹的名字,err回调函数

const fs = require("fs");
fs.rename("../img/fs","../img/text",err => {});

fs.open():打开文件。3个参数,1.要打开文件的路径,2.flags是否可读写,3.回调函数

const fs = require("fs");
fs.open("../fs/2.txt","r",(err,fd) => {
  
});

fs.read():读文件。6个参数,1.读的文件,2.把文件先放进一个缓冲区里,3.从缓冲区的第几个开始读,4.要读文件的长度,5.从文件的那个位置开始读,6.回调函数

const fs = require("fs");
fs.open("../fs/2.txt","r",(err,fd) => {
    let buf = new Buffer(255);
    fs.read(fd,buf,0,9,0,(err,bytesRead,buffer)=>{
        console.log(err);
        console.log(bytesRead);
        console.log(buffer.toString());
        fs.close(fd);//每次读完都要关闭
    });
});

fs.createReadStream():创建可读流:2个参数。1.要读文件的路径,2.编码格式

const fs = require("fs");
let rs = fs.createReadStream("ceshi","utf-8")
rs.on("data",(d)=>{
    console.log(d);
})

fs.createReadStream():创建写流

const fs = require("fs");
let ws = fs.createWriteStream("6.txt");

pipe事件:创建管道流,把读到的文件写入

const fs = require("fs");
let rs = fs.createReadStream("ceshi","utf-8")
let ws = fs.createWriteStream("6.txt");
rs.pipe(ws);
7. http模块

createServer():创建服务。回调函数有2个参数。1.request请求数据,2.response响应结果

const http = require("http");
http.createServer((request,response)=>{
 response.writeHead(200,{//请求头的设置
        "content-type":"text/html;charset=utf-8",//内容的类型,字符集编码
        "Access-Control-Allow-Origin":"*"//跨域的问题解决
    })
    response.write("hello world");//响应的内容 
    response.write("<h1>请求响应</h1>")
    response.end();//end代表一个响应结束
}).listen(3388)//所要监听的端口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旭陌小生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值