Node.js 模块化分类

Node.js

了解几种模块化规范

  • AMD - 依赖前置 - require.js使用此规范
  • CMD - 依赖就近 - sea.js使用此规范
  • CommonJS - Node.js使用此规范
  • ES6

模块的分类

  • 自定义模块
    • Node.js中,创建的JS文件都是自定义模块
  • 内置模块 (核心模块)
    • 安装Node之后,自带了很多内置模块。我们可以直接加载使用他们
  • 第三方模块
    • 其他人编写的时候,发布到npm网站上,我们可以下载使用

自定义模块

我们创建的每个JS文件都是一个自定义模块,并且具有模块作用域,也就是在一个模块中创建的变量、常量、函数等等一切,都只能在当前模块中使用

导出模块:module.exports
  • 共享 (导出/暴露) 内容给其他模块用,需要使用 module.exports 导出内容
    • module 是Node的一个全局对象,对象包含当前模块的详细信息
    • module.exports 是模块的出口,导出内容使用,默认值是 {}
    • 例如: module.exports = {age,name,fn}
const PI = 3.1415926;
function fn(){
	console.log('这是来自m1模块的fn方法');
}

// 导出模块 - module.exports 的值是什么外部引入的就是什么
// * 第一种方式 (倾向于导出一个整体)
module.exports = {
   PI:PI,
   fn:fn
}

// exports是module.exports(对象)的引用
// * 第二种方式 (倾向于导出多个内容,相当于把对象里面的某个属性单独拎出来)
exports.PI = PI;
exports.fn = fn;
导入模块:require(‘模块路径’)
  • 如果需要导入模块导出的内容,可以使用 require() 加载
  • 例如:let 结果 = require('模块路径') => let test = require('./02-test')
  • 加载自定义模块,必须加路径,即使是 ./ 也必须加,可以省略后缀
// 引入模块
let a = require('./01-m1.js');
console.log(a);
示例:
02-test.js - 导出内容
let age = 20;
let name = '张三';
let height = '175cm';
let sing = function (){
    console.log('sing');
}

// 导出age,name,sing给其他模块使用
module.exports = {age,name,sing}
02-use.js - 导入内容
let test = require('./02-test.js');
console.log(test);  // {age:20,name:'张三',fn:Function...}

一个模块导出什么,另一个模块就加载什么,就会得到什么 一个模块导出什么,另一个模块就加载什么,就会得到什么 一个模块导出什么,另一个模块就加载什么,就会得到什么

内置模块

内置模块是Node.js平台自带的一套基本的API(功能模块),也称为核心模块

加载内置模块,不能写路径

Path模块
  • path 是Node 本身提供的API,专门用来处理路径

  • 使用

    • 加载模块

    • // 使用核心模块之前,首先加载核心模块
      let path = require('path');
      let const = require('path');
      
    • 调用path模块中的方法。来处理相应的问题,下面列举path模块中的几个方法

      方法作用
      path.basename(path[, ext])返回 path 的最后一部分(文件名)
      path.dirname(path)返回目录名
      path.extname(path)返回路径中文件的扩展名(包含.)
      path.format(pathObject)将一个对象格式化为一个路径字符串
      path.join([…paths])拼接路径
      path.parse(path)把路径字符串解析成对象的格式
      path.resolve([…paths])基于当前工作目录拼接路径
      const path = require('path');
      // -----------------------basename 获取文件名称 ----------------------
      console.log(path.basename('D:\基础班资料\03-path-test.js'));  // 03-path-test.js
      console.log(path.basename('D:\基础班资料\03-path-test.js','.js'))  // 03-path-test
      // 如果第二个参数和第一个获取的文件名的后缀名一样,那么获取过来的文件名的后缀名就会抵消
      
      // ------------------------extname 获取文件后缀 ----------------------- 
      console.log(path.extname('index.html'));  // .html
      consoel.log(path.extname('index.coffee.md'));  // .md
      
      // ------------------------join 智能拼接路径 --------------------------
      console.log(path.join('a','b','c'));  // a/b/c
      console.log(path.join('a','b','c','index.css'));  // a/b/c/index.css
      console.log(path.join('a','b','../','c','index.js'));  // a/c/index.js
      
      // -----------------_dirname 永远表示当前js文件的绝对路径 ---------------
      console.log(path.join(_dirname,'css','demo.css'));
      // PS D:\BaiduNetdiskDownload\基础班资料\Node课程\NodeJS资料\项目前置课-01\css\demo.css>
      
fs模块
  • fs,即 file system文件系统,该模块可以实现对文件、文件夹的操作

  • 使用:

    • 加载模块

      // 引入模块,引入模块的时候,可以使用var、let、但是建议使用const,因为我们不希望它改变
      const fs = require('fs');
      
    • 调用fs模块的方法,下面举例fs模块中的常用方法

      API作用备注
      fs.access(path, callback)判断路径是否存在
      fs.appendFile(file, data, callback)向文件中追加内容
      fs.copyFile(src, callback)复制文件
      fs.mkdir(path, callback)创建目录
      fs.readDir(path, callback)读取目录列表
      fs.rename(oldPath, newPath, callback)重命名文件/目录
      fs.rmdir(path, callback)删除目录只能删除空目录
      fs.stat(path, callback)获取文件/目录信息
      fs.unlink(path, callback)删除文件
      fs.watch(filename[, options][, listener])监视文件/目录
      fs.watchFile(filename[, options], listener)监视文件
      // readFile -- 异步读取文件
      
      // 第一个参数:必填,读取文件路径
      // 第二个参数:选填,编码类型(utf-8)
      // 第三个参数:必填,文件读取成功要做的那些事
      fs.readFile('./test.json',function(err,data){
          // *第一个是错误对象,当读取发生失败时会出现的对象
          // *第二个参数是读取文件的结果
          if(err) throw err;
          console.log(data);  // 读取到的二进制数据
          console.log(data.tostring());  // 得到原始数据
      });
      
      fs.readFile('./test.json','utf-8',function(err,data){
          if(err){
              console.log('读取文件出错');
          }else{
              console.log(data);  // 读取到的原始数据 
          }
      });
      
      // writeFile -- 异步写入文件
      
      // 写入文件
      // 第一个参数:必填,写入文件的路径,指定文件名和扩展名(会自动创建出来)
      // 第二个参数:必填,写入文件的数据内容
      // 第三个参数:选填,数据内容的编码格式
      // 第四个参数:选填,写入完成后的回调函数
      fs.writeFile('./abc.html','helloworld',function(err){
          if(err !== null){
              return console.log('文件写入失败')
          }
          console.log('文件写入成功')
      })
      
读取写入案例:
// 需求,读取score.txt的文件,转换格式后,写入都score1.txt
// 1.引入fs模块
let fs = require('fs')
// 2.读取文件内容
fs.readFile('./score.txt','utf8',function(err,data){
    // 判断是否读取成功
    if(err !== null){
        return console.log('读取文件失败');
    }
})

// 3.利用正则把获取到的结果的 “=” 改为 “:”
let firstResult = data.replace(/=/g,':');  // '/='表示所有等于号 '/g'表示全局(全部)
// 4.再次利用正则把获取到的结果的空格改为回车换行
let secondResult = firstResult.replace(/ /g,'\r\n');

// 5.写入文件内容
fs.writeFile('./score1.txt',secondResult,'utf8',function(err){
    if(err !== null){
        return console.log('文件写入失败');
    }
    console.log('文件写入成功')
})
创建服务器案例:
// 目标:实现网站服务器
// 1.引入fs和http模块
const fs = require('fs');
const http = require('http');
// 2.创建服务器
let server = http.createServer();
// 3.监听客户端的请求
server.on('request',function(resquest,response){
    // 当有客户端请求,就会触发这个回调函数
    // request请求对象,包含客户端请求时携带的一些信息(参数,路径,请求头...)
    // request.url :指的就是端口号后面的路径 - 获取get参数
    console.log(request.url)
    // request.method :指的是请求方式
    console.log(request.method);
    // response响应对象,返回数据时使用
    console.log('有人访问了我们的服务器')
    
    // 响应给客户端数据
    // ①相应数据
    // response.end('数据')
    // response.end({"name":"zs","age":"18"});
    // response.end('这是一条数据');
    
    // ②响应文件的写法
    // 先把要响应过去的页面获取到
    // 解决中文乱码
    response.setHeader('Content-type','text/html;charset=utf-8');
    fs.readFile('./index.html','utf8',function(err,data){
        return response.end('404');
    })
    response.end(data);
})

// 4.启动服务器
// 第一个参数:端口号,必填
// 第二个参数:运行成功的回调,选填
server.listen(80,function(){
    console.log('服务器启动成功,运行在http://127.0.0.1:80端口');
})
// 终止服务器运行 Ctrl+c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值