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