node.js基础

一、内置模块

模块名都是小写

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

你可能感兴趣的:(1024程序员节,node.js)