一、内置模块
模块名都是小写
1、fs模块
1.1读取文件
let fs = require('fs');
// console.log(fs);
// 文件的读取 readFile("文件路径",callback)
// readFile 是一个异步操作
fs.readFile("./a.txt",(err,data) => {
if(err){
console.log(err);
}else{
console.log(data.toString());
// toString() 将读取的数据转成字符串,不转换会是其他看不懂的格式
//toString()可以转换进制,如toString(16)会转换为16进制
}
})
let text = fs.readFileSync("./a.txt")
// readFileSync 是一个同步操作
console.log(text.toString());
封装方法
let fs = require("fs");
const { resolve } = require("path");
let readFn = (filename) => {
return new Promise((resolve, reject) => {
fs.readFile(filename, (err, data) => {
if (err) {
reject(err)
} else {
resolve(data.toString())
//toString()可以转换进制,如toString(16)会转换为16进制
}
})
})
}
readFn("./a.txt").then(result => {
console.log(result);
return readFn("./b.txt")
}).then(result2 => {
console.log(result2);
return readFn("./c.txt")
}).then(result3 => {
console.log(result3);
})
封装并使用async调用
let fs = require("fs");
const { resolve } = require("path");
let readFn = (filename) => {
return new Promise((resolve, reject) => {
fs.readFile(filename, (err, data) => {
if (err) {
reject(err)
} else {
resolve(data.toString())
}
})
})
}
async function asyncReadFn() {
let aText = await readFn("./a.txt")
let bText = await readFn("./b.txt")
let cText = await readFn("./c.txt")
console.log(aText);
console.log(bText);
console.log(cText);
}
asyncReadFn()
1.2写入数据——会替换原来的数据
let fs = require("fs")
//向文件中写入数据
//writeFile("文件路径",数据,回调函数)
//会覆盖原来的数据
//如果文件不存在,会自动创建一个文件并写入
fs.writeFile("./aa.txt",'新写入的数据',(err) => {
if(err){
console.log(err);
}else{
console.log("写入成功");
}
})
1.3写入数据——追加
//引入模块
let fs = require("fs")
//向文件中追加数据
//如果文件不存在,同样会新建文件并追加内容
fs.appendFile("./aa.txt",'追加的数据',(err) => {
if(err){
console.log(err);
}else{
console.log("追加成功");
}
})
1.4删除文件——unlink
//删除文件 unlink
//导入模块
let fs = require("fs")
fs.unlink("./aa.txt",(err) => {
if(err){
console.log(err);
}else{
console.log('删除成功');
}
})
1.5重命名文件
//修改文件名 rename
//导入模块
let fs = require("fs")
//fs.rename("要修改的文件路径","重命名后的文件名路径",callback)
//不会自动新建文件夹,因此修改时要确保路径存在
fs.rename("./bbbb.txt","./bba.txt",(err) => {
if(err){
console.log(err);
}else{
console.log('重命名成功');
}
})
1.6判断是文件夹还是文件
// 引入fs模块
let fs = require("fs");
// fs.stat用于检测是文件还是文件夹
fs.stat("./a.txt",(err,file) => {
if(err){
console.log(err);
}else{
// console.log(file.isDirectory());
if(file.isDirectory()){
// 判断是不是文件夹
console.log("是文件夹");
}else if(file.isFile()){
// 判断是不是文件
console.log("是一个文件");
console.log(file);
}
}
})
1.7创建文件夹
let fs = require("fs");
// fs.mkdir 用于创建文件夹
// fs.mkdir("文件夹路径及文件夹名",callback)
fs.mkdir("./js",(err) => {
if(err){
console.log(err);
}else{
console.log("创建成功");
}
})
1.8删除文件夹
let fs = require("fs");
// fs.rmdir 用于删除文件夹
// fs.rmdir("文件夹路径及文件夹名",callback)
// 只能删除空文件夹
fs.rmdir("./js", (err) => {
if (err) {
console.log(err);
} else {
console.log("删除成功");
}
})
1.9读取文件夹
let fs = require("fs");
// fs.rmdir 用于读取文件夹
// fs.rmdir("文件夹路径及文件夹名",callback)
fs.readdir("./dirs", (err, FileList) => {
if (err) {
console.log(err);
} else {
console.log(FileList);
// 以数组的形式输出目录
}
})
1.10写入流
/引入fs模块
let fs = require("fs");
let data = "天暗下来你就是光\n";
// 创建一个写入流
let ws = fs.createWriteStream("./input.txt");
for(let i = 0;i<5;i++){
ws.write(data)
console.log(data);
}
ws.end(); //写入结束
ws.on("finish",() => {
console.log("写入完成");
})
1.11读取流
let fs = require("fs") //引入模块
// 创建一个读取流
let rs = fs.createReadStream("./input.txt");
let str = ""; //定义一个空字符来接收每次读取的数据
let num = 0;
// console.log(rs);
// 分多次读取,一次读取一定数量的数据
rs.on("data",(strData) => {
// strData每次读取的数据
str += strData
num+=1
console.log(num)
})
rs.on("end",() => {
console.log(str);
console.log(num);
})
1.12管道流
// 管道流
let fs = require("fs") //引入模块
// 创建一个读取流
let rs = fs.createReadStream("./input.txt");
// 创建一个写入流
let ws = fs.createWriteStream("./output.txt");
rs.pipe(ws)
2、http模块
let http = require("http");
let app = http.createServer((request,response) => {
// request 请求
// reponse 响应
response.write("ok") //服务器给前端响应的数据
response.end()
})
app.listen(9527,() => {
console.log("9527running");
})
let http = require("http");
let fs = require("fs")
let app = http.createServer((request,response) => {
// request 请求
// reponse 响应
response.writeHead(200,{ //设置写入头,这样中文能正常显示
"content-type":"text/html;charset=utf-8"
})
response.write("ok鸭") //服务器给前端响应的数据
response.end()
})
app.listen(9527,() => {
console.log("9527running");
})
let http = require("http");
let fs = require("fs")
let app = http.createServer((request,response) => {
// request 请求
// reponse 响应
// response.writeHead(200,{ //设置写入头,这样中文能正常显示
// "content-type":"text/html;charset=utf-8"
// })
// http://localhost:9527/index.html
console.log(1111);
console.log(request.url); // /index.html
fs.readFile("./dac"+request.url,(err,data) => {
if(err){
console.log(err);
}else{
response.write(data) //服务器给前端响应的数据
}
response.end()
})
})
app.listen(9527,() => {
console.log("9527running");
})
3、url模块
let url = require("url");
let str = "http://localhost:9527/index.html/?username=张三&age=18"
console.log(url.parse(str));
// Url {
// protocol: 'http:',
// slashes: true,
// auth: null,
// host: 'localhost:9527',
// port: '9527',
// hostname: 'localhost',
// hash: null,
// search: '?username=%27张三%27&age=18',
// query: 'username=%27张三%27&age=18',
// pathname: '/index.html/',
// path: '/index.html/?username=%27张三%27&age=18',
// href: 'http://localhost:9527/index.html/?username=%27张三%27&age=18'
// }
console.log(url.parse(str,true));
// Url {
// protocol: 'http:',
// slashes: true,
// auth: null,
// host: 'localhost:9527',
// port: '9527',
// hostname: 'localhost',
// hash: null,
// search: '?username=张三&age=18',
// query: [Object: null prototype] { username: '张三', age: '18' },
// pathname: '/index.html/',
// path: '/index.html/?username=张三&age=18',
// href: 'http://localhost:9527/index.html/?username=张三&age=18'
// }
console.log(url.resolve("http://localhost:9527","login"));
// http://localhost:9527/login
4、querystring模块
let querystring = require("querystring");
console.log(querystring.parse("username=张三&age=18"));
// { username: '张三', age: 18 }
console.log(querystring.stringify({ username: 'erge', age: 18 }));
// username=erge&age=18
console.log(querystring.escape("雷锋"));
// %E9%9B%B7%E9%94%8B
console.log(querystring.unescape("%E9%9B%B7%E9%94%8B"));
// 雷锋
5、path模块
let path = require("path");
let str = "http://localhost:9527/index.html"
console.log(path.basename(str)); //index.html
console.log(path.extname(str)); //.html
console.log(path.dirname(str)); //http://localhost:9527
console.log(path.parse(str));
// {
// root: '',
// dir: 'http://localhost:9527',
// base: 'index.html',
// ext: '.html',
// name: 'index'
// }
二、自定义模块
demo.js文件:
let username = "张三"
exports.username = username
module.js文件:
let username = require("./module/demo.js");
console.log(username);
// { username: '张三' }
let {username} = require("./module/demo.js");
console.log(username);
// 张三
demo.js文件:
let username = "张三";
let age = 18
// exports.username = username
// {username:"张三"}
// exports.age = age
// {age:18}
module.exports = {
username, //"张三"
age //18
}
// module.exports和exports的区别:
// 都是暴露模块
// module.exports是暴露内容的
// exports是暴露对象
module.js文件:
let userinfo= require("./module/demo.js");
console.log(userinfo);
// { username: '张三' ; age: 18 }
let {username,age} = require("./module/demo.js");
console.log(username);
console.log(age);
// 张三
// 18
// 自定义模块一:
let uesername1 = "张三";
let age1 = 18
exports.uesername1 = uesername1
exports.age1 = age1
// 自定义模块二:
let username2 = "李四";
let age2 = 20;
module.exports = {
username2,
age2
}
//使用自定义模块:
let ceshi1 = require("ceshi1");
console.log(ceshi1);
// { uesername1: '张三', age1: 18 }
let { username2,age2} = require("ceshi2");
console.log(username2,age2);
// 李四 20
mongodb数据库:
Mongoose 用于连接mongodb的第三方库,在npm中可进行查看
三、express模块
// 下载expree模块
// cnpm install express --save
let express = require("express");
// 创建一个服务区对象
let app = new express();
// 配置express路由
app.get("/home",(req,res) => {
console.log(req);
console.log(req.url);
// console.log("------------------------------------------");
// console.log(res);
res.send("首页")
})
app.listen(9527,() => {
console.log("9527running");
})
使用ejs模板
ejs文件:
//deml.ejs文件
Document
- 11
- 11
- 11
- 11
<% for(let i =0;i
- <%= list[i]%>
<% } %>
js文件:
//app.js文件
let express = require("express")
let ejs = require("ejs");
let app = new express()
// 使用ejs模板的步骤
// 1、下载ejs
// 2、引入ejs
// 3、配置模板引擎类型
// 4、配置模板所在的目录
app.set("view engia",ejs)
app.set("views",__dirname + "/views")
// __dirname 指的是文件当前所在目录
// 配置静态资源目录
app.use(express.static("public"))
app.get("/home",(req,res) => {
console.log(req.url);
let arr = [1,2,3,4,5]
res.render("demo.ejs",{
list:arr
}) //渲染模板文件给浏览器
})
app.listen(9527,() => {
console.log("9527running");
})
// 配置静态资源目录
app.use(express.static("public"))
req.query 接收get方式进行的传参
req.body 接收post方式进行的传参 首先要安装 body-parser 模块
req.params 接收 restful 格式的传参 格式示例:http:localhost:3000/home/001
利用cookieparser对cookie进行设置以及加密
let express = require("express");
let bodyParser = require('body-parser')
let cookieParser = require('cookie-parser')
let app = new express();
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
// app.use(cookieParser()) //是否添加加密的干扰项
app.use(cookieParser("qwertyuioppasdfghjklzxcbvbnbm")) //对cookie进行加密的一些干扰项
app.post("/home", (req, res) => {
console.log(req.body);
res.send(req.body)
})
app.get("/sex", (req, res) => {
console.log(req.query);
res.send(req.query)
})
// restful格式
app.get("/home/:id/:cid", (req, res) => {
console.log(req.params);
res.send(req.params)
})
app.get('/setcookie', function (req, res) {
res.cookie("username","1234",{
maxAge:24*60*+60*1000,
signed:true // 开启 对cookie进行加密
})
res.send("cookie设置成功")
})
// 读取没有加密的cookie
// app.get("/getcookie",(req,res) => {
// console.log(req.cookies);
// res.send("cookie获取成功")
// })
// 读取加密后的cookie
app.get("/getcookie",(req,res) => {
console.log(req.signedCookies);
res.send("cookie获取成功")
})
app.listen(9527, () => {
console.log("95270running");
})
express-session
app.use(session({
secret: 'keyboard cat',//任意字符串,加密session
resave: false, //强制保存session,默认true不保存
saveUninitialized: true, // 将初始化的session保存
cookie: {
// secure: true // 指的是https协议
maxAge:10*1000 //有限期 单位毫秒
},
rolling:true //让cookie的有效期重新计时,保证session不过期
}))
// 只要一直操作网站session的有效时间就会一直刷新
// session
app.get("/login",(req,res) => {
req.session.username = "张三"
res.send("登录成功")
})
app.get("/userlist",(req,res) => {
if(req.session.username){
res.send("欢迎"+req.session.username+"使用网站")
}else{
res.send("请登录")
}
})
// req.session.destroyed() //销毁session
// req.session.destroyed() //销毁session