1、http模块
//引入http模块
var http = require('http');
const url = require('url');
// request :获取客户端传过来的信息
// response: 给浏览器响应信息
http.createServer((req, res) => {
// 获取浏览器访问的url地址
console.log(req.url);
if(req.url!='/favicon.ico'){
var userInfo = url.parse(req.url,true).query;
console.log(userInfo)
console.log(`姓名:${userInfo.name}——年龄:${userInfo.age}`)
}
// 设置响应头,状态码是200,文件类型是html,字符集是utf-8
// 解决乱码
res.writeHead(200, {
'Content-Type': 'text/html',
charset: 'utf-8'
});
// 解决乱码
res.write("<head><meta charset='UTF-8'></head>")
res.write('<h1>你好 world!</h1>')
res.write('hello world!')
res.write('<h2>启动supervisor成功</h2>')
// response.end('Hello World');
// 结束响应,必须调用
res.end();
}).listen(3000);
2、url模块
const url = require('url');
var api = 'http://www.baidu.com?user=zhangsan&age=20';
// 解析url里面的参数,传入参数true,转化为对象
var getVal = url.parse(api,true).query;
console.log(getVal);
console.log(`姓名:${getVal.user}——年龄:${getVal.age}`)
3、supervisor工具
// supervisor是node的一个自启动工具
/*
使用方法:
1、安装supervisor
npm install -g supervisor
2、使用supervisor代替node命令启动应用
supervisor app.js
*/
4、fs模块
/*
1、fs.stat 检测是文件还是目录
2、fs.mkdir 创建目录
3、fs.writeFile 创建写入文件
4、fs.appendFile 追加文件
5、fs.readdir 获取目录
6、fs.rename 重命名 移动文件
7、fs.rmdir 删除目录
8、fs.unlink 删除文件
9、fs.readFile 读取文件
*/
const fs = require('fs');
const {
resolve
} = require('path');
const {
rejects
} = require('assert');
// 1、fs.stat 检测是文件还是目录
fs.stat('./fs.js', (err, data) => {
if (err) {
console.log(err);
return;
}
// 检测是文件还是目录
console.log(`是文件:${data.isFile()}`);
console.log(`是目录:${data.isDirectory()}`);
});
// 2、fs.mkdir 创建目录
/*
path 将创建的目录路径
mode 目录权限(读写权限)默认777
callback 回调函数,传递异常参数err
*/
fs.mkdir('./css', (err) => {
if (err) {
console.log(err);
return;
}
console.log('创建成功');
})
// 3、fs.writeFile 创建写入文件 如果不存在文件则创建,若存在则替换
/*
filename (string) 文件名称
data (string|buffer) 将要写入的内容,看可以是字符串或buffer数据
options (odject) option数组对象,包含:
-encoding (string) 可选值,默认‘utf8’,当data是buffer时,该值应该为
-mode (Number) 文件读写权限,,默认值438
-flag (string) 默认值‘w’
callback (function) 回调,传递一个异常参数err.
*/
fs.writeFile('./html/index.html', '你好nodejs', (err) => {
if (err) {
console.log(err);
return;
}
console.log('创建写入文件成功');
})
// 4、fs.appendFile 追加文件 没有该文件就创建,有的话就覆盖替换
fs.appendFile('./css/base.css', 'bode{color:red}', (err) => {
if (err) {
console.log(err);
return;
}
console.log('appendFile 成功');
})
// 5、fs.readFile 读取文件
fs.readFile('./html/index.html', (err, data) => {
if (err) {
console.log(err);
return;
}
console.log(data);
console.log(data.toString()); //将buffer数据转换为string类型
})
// 6、fs.readdir 获取目录 [ 'index.html', 'news.html' ]
fs.readdir('./html', (err, data) => {
if (err) {
console.log(err);
return;
}
console.log(data);
})
// 7、fs.rename 重命名 功能:1、重命名,2、移动文件
fs.rename('./css/aaa.css', './css/index.css', (err) => {
if (err) {
console.log(err);
return;
}
console.log('重命名成功!');
});
// 移动文件
fs.rename('./css/index.css', './html/index.css', (err) => {
if (err) {
console.log(err);
return;
}
console.log('移动文件成功!');
});
// 8、fs.rmdir 删除目录 目录里面有文件的时候不能删除目录
fs.rmdir('./aaa', (err) => {
if (err) {
console.log(err);
return;
}
console.log('删除目录成功!');
});
// 9、fs.unlink 删除文件
fs.unlink('./aaa/index.html', (err) => {
if (err) {
console.log(err);
return;
}
console.log('删除文件成功!');
});
// 列子:
// 1、判断服务器上面有没有upload目录,如果没有就创建这个目录,有的话不做操作。(图片上传)也可使用第三方的mkdirp模块
var path = './upload';
fs.stat(path, (err, data) => {
if (err) {
// 执行创建目录
mkdir(path);
return;
}
if (data.isDirectory()) {
console.log('upload目录存在');
} else {
// 首先删除文件,再去创建目录
fs.unlink(path, (err) => {
if (!err) {
mkdir(path);
} else {
console.log('请检测传入的数据是否正确');
}
})
}
});
// 封装创建目录的方法
function mkdir(dir) {
fs.mkdir(dir, (err) => {
if (err) {
console.log(err);
return;
}
})
}
// 2、wwwroot文件夹下面有images css js 以及 index.html 找出wwwroot文件夹下面的所有目录,然后放入到一个数组中
// 注意:fs里面的方法都是异步方法
// 1、改造for循环,递归实现 2、使用async await
var path = './wwwroot';
var dirArr = [];
fs.readdir(path, (err, data) => {
if (err) {
console.log(err);
return;
}
console.log(data);
// 递归
(function getDir(i) {
if (i == data.length) {
console.log(dirArr);
return;
}
fs.stat(path + '/' + data[i], (error, stats) => {
if (stats.isDirectory()) {
dirArr.push(data[i]);
}
getDir(i + 1)
})
})(0)
});
// 使用async和await实现
// 1、定义一个isDir的方法判断一个资源到底时目录还是文件
async function isDir(path) {
return new Promise((resolve, reject) => {
fs.stat(path, (error, stats) => {
if (error) {
console.log(error);
reject(error);
return;
}
if (stats.isDirectory()) {
resolve(true);
} else {
resolve(false);
}
})
})
}
// 2、获取wwwroot里面的所有资源,循环遍历
function main() {
var path = './wwwroot';
var dirArr = [];
fs.readdir(path, async (err, data) => {
if (err) {
console.log(err);
return;
}
for (var i = 0; i < data.length; i++) {
if (await isDir(path + '/' + data[i])) {
dirArr.push(data[i])
}
}
console.log('+++++++++++++++++++++++++++++++++++++++++++');
console.log(dirArr);
})
}
main();
5、可读流、写入流、管道流
const fs = require('fs');
// 以流的形式读入文件
var readSteam = fs.createReadStream('./input.txt');
// 以流的形式写入文件
var writeSteam = fs.createWriteStream('./output.txt');
// 管道流 用于复制大文件
var readImgSteam = fs.createReadStream('./13.jpg');
var writeImgSteam = fs.createWriteStream('./wwwroot/13.jpg');
readImgSteam.pipe(writeImgSteam);
// 读入文件
var count = 0;
var str = '';
readSteam.on('data', (data) => {
str += data;
count++;
});
readSteam.on('end', () => {
console.log(str);
console.log(count);
});
readSteam.on('error', (err) => {
console.log(err);
})
// 写入文件
var msg = '';
for (var i = 0; i < 500; i++) {
msg += '收费的开放空间环境客户的房价快速导航看到函数返回\n'
}
writeSteam.write(msg);
// 标记文件末尾
writeSteam.end();
writeSteam.on('finish', () => {
console.log('写入完成');
})