Node.js模块化开发

本文深入探讨了Node.js的模块化开发,包括CommonJS规范的定义、引入和暴露,以及核心模块如http、fs和url的使用。讲解了如何通过exports和module.exports进行模块成员导出,如何通过require方法导入模块。此外,还介绍了http模块用于搭建服务器的基本方法,fs模块的文件操作功能,以及url模块解析URL的能力。
摘要由CSDN通过智能技术生成

Node.js模块化开发

指的是再开发过程中将各个部分单独开发,开发完毕之后进行组装。
模块化开发有几种规范:
1.Node.js规定一个Javascript文件就是一个模块,模块内部定义的变量和函数默认情况下在外部无法得到。
2.模块内部可以使用exports对象进行成员导出,使用require方法导入其他模块

AMD、 CMD、 CommonJS、 ES module transport
AMD:前端模块化开发规范 代表:require.js
CMD:前端模块化开发规范 代表:sea.js
CommonJS:同步的模块化开发规范 代表:node
ES module transport: 前端模块化开发规范 代表:ES6

我们写的是模块: 1. 如何定义模块 2. 如何引入其它模块 3. 如何暴露内容
CommonJS规范:
定义:一个JS文件,就是一个模块
引入:require函数 引入其他模块
暴露:module.exports = { }

//index.js文件
var second = require("./second.js"); //后缀名可省略
console.log(second);
console.log(second(4,2));

//second.js文件
function sum1(a, b) {
    return a + b;
}
function sum2(a, b) {
    return a - b;
}
function sum3(a, b) {
    return a * b;
}
function sum4(a, b) {
    return a / b;
}
module.exports = sum3;

module对象
每一个node.js执行文件,都自动创建一个module对象,同时,module对象会创建一个叫exports的属性,初始化的值是 {}。

module.exports = {};

exports和module.exports的关系
1.向模块外部导出数据时,exports和module.exports指向同一个内存空间。
2.exports是 module.exports的别名(地址引用关系),当exports和module.exports对象指向的不是同一个对象时,以module.exports为准。

其实给 exports 赋值就是给 module.exports 这个空对象添加了两个属性。

var str = "difference"; 
exports.a = str; 
exports.b = function () { }
//相当于
var str = "difference"; 
module.exports.a = str; 
module.exports.b = function () { }
Node的模块分两种

核心模块 也叫内置模块 和 第三方模块
核心模块:每一个模块提供了不同的功能
比如http模块用于搭建服务器
比如fs模块 用于操作文件和文件夹
比如 url模块用于操作url字符串
比如querystring模块 用于解析query字符串

http模块

// 引入http模块
var http = require("http");
// http.createServer() 方法用于搭建服务器
var server = http.createServer(function(req, res) {
    // Node利用这个函数进行前端请求的处理
    // req: request 请求
    // res: response 响应
    // console.log(req.url);
    // console.log(req.method);
    // console.log(req.connection.remoteAddress);
    // res.setHeader("content-type", "text/plain;charset=utf-8");
    // res.end("别瞎吵吵,认真听课");

    // // 判定url
    if (req.url === "/a") {
        res.setHeader("content-type", "text/plain;charset=utf-8");
        res.end("别瞎吵吵,认真听课");
    } else if (req.url === "/b") {
        res.setHeader("content-type", "text/plain;charset=utf-8");
        res.end("网盘领取资料");
    }
});

// server就是服务器的实例
server.listen(3000, "10.3.131.2");

req对象
① req.url:保存了当前请求的url地址
② req.method:保存了当前请求的方法
③ req.headers:保存了当前请求头的信息
res对象
① res.setHeader():设置响应头
② res.writeHeader():设置响应状态码和响应头,对象形式一次性可以设置多个响应头
③ res.write():设置响应主体
④ res.end():将响应行、响应头、响应体一次性返回给浏览器

fs模块(系统模块)
f : file文件 ,s :system系统,文件操作系统
功能:fs是Node.js中的文件系统,用来操作文件和目录的增删改查

var fs = require("fs");
// 读取index.html的内容
fs.readFile("WWW/index.html","utf-8" function(err, data) {
    // 回调函数
    // err 表示读取过程中可能发生的错误,参数err的值为错误对象(比如文件不存在) ,否则err的值为null
    // data 表示读取成功的时候 读取到的数据
    console.log(data.toString())
});


var fs = require("fs");
// 读取index.html的内容
fs.readFile("WWW/index.html" ,function(err, data) {
    // 回调函数
    // err 表示读取过程中可能发生的错误  比如文件不存在
    // data 表示读取成功的时候 读取到的数据
    console.log(data)
});

// 读取second.html的内容
fs.readFile("WWW1/second.html", function(err, data) {
    console.log(err)
    if (!err) {
        console.log(data.toString())
    }
})
// 追加文件 向文件内追加内容 如果文件不存在 那么先创建文件 不会创建对应的不存在的文件夹
// 第一个参数是目标文件
// 第二个参数是追加的内容
// 第三个参数是回调函数
fs.appendFile("WWW1/hello.txt", "小宝贝", function(err) {
    console.log(err)
})

// 删除文件
fs.unlink("WWW/hello.txt", function(err) {
    console.log(err)
})

// 文件夹操作
// 创建
fs.mkdir("Beautiful", function(err) {
    console.log(err)
})

// 删除 只能删除空文件夹
fs.rmdir("Beautiful", function(err) {
    console.log(err);
})

url模块
url也是node提供的系统模块,使用该模块能够将get地址分解,并提取出其中的参数。
get地址: /getData?id=10001&name=zs

核心方法:url.parse(url)得到一个对象,里边包含整个url中的各种信息。
parse(var1, var2);
参数1: url地址
参数2: true(get参数转为对象) 、 false(get参数就是一个字符串)

url.parse() :将字符串形式的url转化为对象
url.format() :将对象形式的url转化为字符串
request.url():获得的是字符串形式的ur

两个属性最重要
pathname:当前请求的地址
query: get传递的参数

var url = require("url");
var urlStr = "https://www.baidu.com:443/index.html?a=1#sadfsadf";

// url.parse 字符串 => 对象
var obj = url.parse(urlStr);
console.log(obj);

// 将host属性修改
obj.host = 'www.taobao.com:443';
// url.format 对象 => 字符串
var urlStr1 = url.format(obj);
console.log(urlStr1); // 我们发现域名被修改了


//结果
Url {
  protocol: 'https:',
  slashes: true,
  auth: null,
  host: 'www.baidu.com:443',
  port: '443',
  hostname: 'www.baidu.com',
  hash: '#sadfsadf',
  search: '?a=1',
  query: 'a=1',
  pathname: '/index.html',
  path: '/index.html?a=1',
  href: 'https://www.baidu.com:443/index.html?a=1#sadfsadf'
}
https://www.taobao.com:443/index.html?a=1#sadfsadf
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值