fs模块
fs模块是Node.js的一个核心模块,专门用来操作系统中的文件
fs.readFile(文件路径,options,回调函数)
fs.readFileSync(第一个参数,第二个参数)
- 第一个参数是文件路径
- 第二个参数可以是一个表示配置的对象,也可以是一个表示文本文件编码的字符串。默认的配置对象是{ encoding: null, flag: ‘r’ },即文件编码默认为null,读取模式默认为r(只读)。如果第二个参数不指定编码(encoding),readFileSync方法返回一个Buffer实例,否则返回的是一个字符串
fs.writeFile(文件路径,写入的数据,options,回调函数)
- 异步的向指定路径的文件写入指定数据。回调函数在写完指定数据后触发异步写入文件.,如果文件不存在,则自动创建。可以在文件里面写入任何的数据类型,所有数据都会被隐式转换成字符串。
fs.writeFileSync(文件路径,写入的数据,options) - 同步的向指定路径的文件写入指定数据
fs.existsSync(文件路径) 判断路径是否存在
fs.stat(文件路径) 查看指定文件的信息
fs.truncate(文件路径,字节长度,回调函数) 把文件大小限制在指定字节
fs.unlink(文件路径,回调函数) 删除指定路径的文件
fs.rmdir(文件路径,回调函数) 删除指定路径的空文件夹
fs.mkdir(文件路径,回调函数) 创建指定路径的空文件夹
fs.readdir(文件路径,回调函数) 读取指定文件夹下的所有文件
fs.rename(oldPath,newPath,回调路径) 把oldPath的文件移动到newPath上。
- rename(旧路径,新路径,回调函数) 1.把旧路径的文件移动到新路径 2.并且改名
qs模块
const qs=require(‘querystring’)
qs.parse()是将URL解析成对象的形式
qs.stringify()是将对象 序列化成URL的形式,以&进行拼接(a=张三&b=李四)
// qs.parse()是将URL解析成对象的形式
let url = 'method=data&projectId=10086&appToken=12345;
qs.parse(url) 输出为:
{
method:'data',
projectId:'10086',
appToken:' 12345'
}
// qs.stringify()是将对象 序列化成URL的形式,以&进行拼接(a=1&b=2)
let url = {
method:'data',
projectId:'10000',
appToken:'54321'
}
qs.stringify(url) 输出为: 'method=data&projectId=10000&appToken=54321';
http模块
// qs模块提供用于解析和格式化 URL 查询字符串的实用工具。 可以使用以下方式访问它:
// qs.parse() 方法将 URL 查询字符串 str 解析为键值对的集合。
//1.
const http = require('http');
const querystring = require('querystring');
const qs = require("querystring");
//2.
const server = http.createServer((request, response)=>{
//提取表单中的用户名和密码
//1. 声明一个变量
let body = '';
//2. 绑定 data 事件
request.on('data', (chunk) => {
//每次读取是64kb,需要多次读取
body += chunk; //chunk是二进制数据,和字符串相加也是字符串
});
//3. 绑定 end 事件
request.on('end', ()=>{
// console.log(body);
// 将字符串转化为对象
const data = qs.parse(body);
// 将所有的用户信息读取出来
const users = fs.readFileSync('./users.json').toString();
// 将字符串转化成对象
const usersObj = JSON.parse(users);
// 将新用户的对象压入usersObj 对象中
usersObj.data.push(data);
// 将对象转化为JSON字符串
let str = JSON.stringify(usersObj);
fs.writeFileSync('./users.json', str + `\r\n`);
console.log(body);
response.end("over");
});
});
//3.
server.listen(8000, ()=>{
console.log('服务已经启动, 8000 端口监听中.....');
})
模块化
自定义模块化的暴露和引入
- 暴露
// 此文件为 module.js
function add(a,b) {
return a + b;
}
function div(a,b) {
return a * b;
}
module.exports = {
add, // 相当于 add:add
div // 相当于 div:div
};
- 引入
// 此文件名为test.js , 与module.js在同一文件夹内
const {add,div}=require('./module.js');
console.log(add(1,2)); // 输出 3
console.log(add(1,2)); // 输出 2
- module.exports 可以暴露任意数据 ,如果暴露数值或字符串,则会覆盖
- 可以使用 module.exports 暴露多个数据
- exports 也可以暴露数据,不过不能使用 exports = xxx 的形式
- 只要记住 用module.exports = xxx 来暴露就可以
文件导入——文件路径不带后缀和文件夹的情况
- 如果没有加文件后缀,会按照以下后缀加载文件
- .js fs模块同步读取文件编译执行
- .json fs模块同步读取文件,用JSON.parse()解析返回结果
- .node 这是c/c++编写的扩展文件,通过dlopen()方法编译
- 其他扩展名 会以.js文件载入
- 如果是文件夹则会默认加载该文件夹下 package.json 文件中 main 属性对应的文件
- 如果 main 属性对应的文件不存在,则自动找 index.js index.json
- 如果是内置模块或者是 npm 安装的模块,直接使用包名字即可
- npm 引入包时,如果当前文件夹下的 node_modules 没有,则会自动向上查找
只要记住 在导出时用 module.exports 在导入时 require(‘完整路径’)