Nodejs模块

28 阅读4分钟

Node.js模块化

常用的内置模块:fs、path、http、querystring

node.js模块库:www.npmjs.com/

http模块

  • 是node.js中内置的模块

// 1.引入nodejs里的内置http模块
// node  require exports
const http = require("http");
// 2.创建http服务器
//  request 请求报文
//  response  响应
const server = http.createServer(function (req, resp) {
  // 告诉浏览器,给它的内容该如何进行解读
  resp.setHeader("Content-Type", "text/html;charset=utf-8");
  // 2.1 接受get请求
  // 2.2 处理请求,并且响应结果
  if (req.method != "GET") {
    resp.write("对不起,不支持其他请求,只支持get");
    resp.end(); //立即断开
    return;
  }
  resp.write("你看到我了吗?你好  hi...hi");
  resp.end(); //立即断开
});
// 设置监听端口
server.listen(8181, () => {
  console.log("服务器启动完毕!");
});

querystring模块

qs模块的方法


/* 
4个方法:
    stringify()  把对象转换成字符串
    parse()  把字符串转为对象
    unescape() 解码   decodeURIComponent()
    escape() 编码   encodeURIComponent()
*/

方法的使用

// 1.导入模块
const qs = require("querystring");

// stringify()  把对象转换成字符串
var params = {
  id: 1,
  name: "张婧怡",
  sex: "女",
  age: 20,
  hobby: ["唱歌", "跳舞"],
};
//stringify 默认用 & 和 = 拼接
let str = qs.stringify(params);
// 可以自定义
let str1 = qs.stringify(params, "~", "@");
console.log(qs.unescape(str)); //unescape() 解码
console.log(qs.escape(str1))    //escape() 编码

// parse()  把字符串转为对象
let strr = "id=1&name=张婧怡&sex=女&age=20&hobby=唱歌&hobby=跳舞";
// 默认转换 & 和 = 符号连接的字符串 
console.log(qs.parse(strr));
// 可以设置
let strr1 = "id@1~name@张婧怡~sex@女~age@20~hobby@唱歌~hobby@跳舞";
console.log(qs.parse(strr1,"~","@"))

image.png

fs 文件系统模块

  • 方法:每一个方法都有同步和异步两种,带Sync表示同步的
/* 
    1.stat() 判断是文件还是文件夹 
        isFile()    是文件吗?
        isDirectory()   是文件夹吗?
    2.mkdir()   创建文件夹   
    3.writeFile()   写入内容
    4.appendFile()  追加内容
    5.readFile()    读取文件内容
    6.readdir() 读取目录,读取指定路径下的所有内容(文件和文件夹)
    7.rename()  重命名(文件和文件夹)
    8.rmdir()   删除文件夹(只能删除空的文件夹)
        {recursive:true,force:true} 强制删除有内容的文件夹
    9.unlink()  删除文件
    10.copyFile() 拷贝文件
    11.读取文件到其他文件
      createReadStream() 读
      createWriteStream() 写    
      pipe()  管道流,小内容可以,但是大文件、视频、音频不推荐使用它
*/

jsonwebtoken 加密

1、生成公钥和私钥

打开gitbash,输入 openssl

1).生成私钥

genrsa -out rsa_private_key.pem [指定长度,如1024,默认2048]

2).生成公钥


rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

2、使用


const fs = require("fs")
const jwt = require("jsonwebtoken")

// 通过openssl
// 私钥:genrsa -out rsa_private_key.pem
// 公钥:rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
//私钥
const  privateKey = fs.readFileSync("./rsa_private_key.pem").toString()
// 公钥
const publicKey = fs.readFileSync("./rsa_public_key.pem").toString()
// console.log(publicKey); 

let token = jwt.sign({name:"黄景瑜"},privateKey,{
    expiresIn:60*60,    //3600秒
    algorithm:"RS256"   //加密算法
})
console.log(token);
// 通过网络发送给别人,别人解密
const res = jwt.decode(token,{algorithm:["RS256"]},publicKey)
console.log("结果:",res);

image.png

url模块

  • url模块方法

    1. parse() 路径转对象(重点)

      pathname、query

      parse(url,true) 第二个参数填true可以让query变成一个对象

    2.format() 对象转路径(了解就行)

1、parse():路径转对象(重点)

const url = require("url");

var baseUrl = "http://www.baidu.com:8080/api/login?name=abc&pwd:123#/aaa";

const obj = url.parse(baseUrl);
// console.log(obj);
console.log(obj.protocol); //协议 http:
console.log(obj.host); // www.baidu.com:8080
console.log(obj.hostname); // www.baidu.com
console.log(obj.port); // 端口 8080
console.log(obj.path); ///api/login?name=abc&pwd:123
console.log(obj.pathname); ///api/login
console.log(obj.search); //?name=abc&pwd:123
console.log(obj.query); //name=abc&pwd:123
console.log(obj.hash); //#/aaa

console.log("-----------------------------");
// 重点
var baseUrl = "http://www.baidu.com:8080/api/login?name=abc&pwd:123#/aaa";
const { pathname, query } = url.parse(baseUrl, true); //true,快速让query变成一个对象
console.log(pathname);
console.log(query);

2、format():对象变url(了解)

const url = require("url");
// -------对象变url-----
var myobj = {
  protocol: "http:",
  slashes: true,
  auth: null,
  host: "www.baidu.com:8080",
  port: "8080",
  hostname: "www.baidu.com",
  hash: "#/aaa",
  search: "?name=abc&pwd:123",
  query: "name=abc&pwd:123",
  pathname: "/api/login",
  path: "/api/login?name=abc&pwd:123",
  href: "http://www.baidu.com:8080/api/login?name=abc&pwd:123#/aaa",
};
console.log(url.format(myobj));

path模块

path模块的方法

/* 
path模块的方法:
    1.join()    拼接
    2.resolve() 拼接和替换
    3.extname() 后缀
    4.basename()    得到最后一部分(文件名称+后缀名)
    5.dirname() 得到路径名称,不带最后一部分    
        __dirname,得到当前文件所在的位置(用途:代码移植)
*/

方法的使用

const path = require("path");

// ---------  1.join() 拼接  ---------
console.log(path.join("/aaa", "/bbb"));
console.log(path.join("/aaa", "bbb"));
console.log(path.join("aaa", "/bbb"));
console.log(path.join("aaa", "bbb"));
console.log(path.join("/aaa/", "/bbb/"));

// ---------  2.resolve() 拼接和替换  ---------
console.log(path.resolve("aaa", "bbbb")); // D:\千峰\练习\day\上课案例\js课程\Nodejs\day02\aaa\bbbb
// 拼接
console.log(path.resolve("/aaa", "bbb")); //D:\aaa\bbb
// 替换,第二个参数首尾带/
console.log(path.resolve("/aaa", "/bbb")); //D:\bbb

// ---------  3.extname() 后缀  ---------
var str = "abc.jpg.sdd.ff.gif"
console.log(path.extname(str));//.gif

// ---------  4.basename() 文件名称+后缀名  ---------
var str = "D:/aa/bb/cc/ss/头像.jpeg"
console.log(path.basename(str));//头像.jpeg

// ---------  5.dirname() 得到路径名称,不带最后一部分  ---------
var str = "D:/aa/bb/cc/ss/头像.jpeg"
console.log(path.dirname(str));//D:/aa/bb/cc/ss
// __dirname,得到当前文件(08-path模块.js)所在的位置
console.log(__dirname);