Node基础入门(二):模块

作者 : 开心源码 本文共3514个字,预计阅读时间需要9分钟 发布时间: 2022-05-13 共150人阅读

上一篇《Node基础入门(一):起步》

一、全局模块

1. 定义:何时何地都能使用,不需要引入;

2. process.env:环境变量,执行Node命令console.log(process.env) ,相似于电脑的系统变量 :

3. process.argv:在D:\node\index.js中,输入console.log(process.argv),而后在命令行工具中输入node index.js,发现打印了一个长度为2的数组,我们再试下在后面增加少量信息,输入node index.js a b 12 34 大海,结果如下图:

我们发现,a在数组的第2个位置,b在第3个位置……,也就是说这里相当于收录客户的输入内容?于是,我们可以利用这一点实现一个简单的加法计算器!index.js代码修改如下:

// 将数组第2位的数作为被加数,注意将字符串转为整形let num1 = parseInt(process.argv[2])// 将数组第3位的数作为加数let num2 = parseInt(process.argv[3])// 打印二者的和console.log(num1 + num2)

命令行输入node index.js 1 2,结果:3

4. __dirname:当前文件目录,index.js

console.log(__dirname)

命令行输入node index.js,结果:D:\node

二、系统模块

1. 定义:需要require,但不需要额外下载;

2. path:用于解决文件路径和目录路径的实用工具 ,index.js代码修改如下:

let path = require('path')console.log(path.dirname('/node/a/b/c/1.jpg')) // 文件路径console.log(path.basename('/node/a/b/c/1.jpg')) // 文件名console.log(path.extname('/node/a/b/c/1.jpg')) // 文件扩展名console.log(path.resolve('/node/a/b/c', '../../', 'd')) // 在c的上级的上级(即a下面)增加一个dconsole.log(path.resolve(__dirname, 'index.js')) // 这样可以得到index.js的绝对路径

命令行输入node index.js,结果如下:

/node/a/b/c1.jpg.jpgD:\node\a\dD:\node\index.js

3. fs:用于文件读写操作

(1). 读文件fs.readFile()

let fs = require('fs')// 第一个参数是文件路径   fs.readFile('./a.txt', (err, data) => {  if (err) {    console.log(err)  } else {    console.log(data)    console.log(data.toString())  }})

在index.js同级目录下新建a.txt,内容为abc,命令行输入node index.js,结果:

<Buffer 61 62 63> // abc的二进制格式abc // 调用.toString()才能打印abc

(2). 写文件fs.writeFile()

let fs = require('fs')fs.writeFile('b.txt', '月薪2万', (err) => {  if (err) {    throw err  }})

命令行输入node index.js,结果:D:\node\下多了一个b.txt文件,内容为“月薪2万”。假如改成“月薪3万”再执行一遍,b.txt文件内容就是“月薪3万”,如何做到不覆盖而是追加呢?加一个{flag: 'a'}(“a”表示append)就可:

fs.writeFile('b.txt', '月薪2万', {flag: 'a'}, (err) => {...})

以上都是异步的(推荐),我们看看同步的方式:

// 同步读let data = fs.readFileSync('./a.txt')console.log(data.toString()) // abc// 同步写  fs.writeFileSync('b.txt', '鼠你好运')console.log(data) // undefined

三、自己设置模块

1. 定义:require自己封装的模块;

2. exports:导出模块,我们在D:\node\下新建mod.js,向外暴露a和b:

exports.a = 1exports.b = 2

修改index.js

const mod = require('mod') // .js可以省略console.log(mod.a)console.log(mod.b)

命令行执行index.js,发现报错:找不到mod.js。起因是引用路径不对,正确的路径应该为’./mod’,这样就能拿到a和b了。

其实,假如不加’./’等具体路径,Node默认从node_modules文件夹下加载该模块。

假如既没有指明路径,又没有node_modules文件夹,就会从Node的安装目录处找(里面也有一个node_modules文件夹,安装了少量全局的模块)。

3. module:导出对象、方法、类,修改mod.js代码:

// 通过导出对象以达到批量导出的目的module.exports = {  a: 1,   b: 2}// 或者导出方法module.exports = function () {  console.log(123)}// 或者导出类module.exports = class {  constructor (name) {    this.name = name  }  show () {    console.log(this.name)  }}

修改index.js

const mod = require('mod')// 若引入的是一个对象console.log(mod.a) // 1console.log(mod.b) // 2// 若引入的是一个方法mod() // 123// 若引入的是一个类let m = new mod('大海')m.show() // 大海

四、HTTP模块(核心)

服务器对象http.createServer(),快速搭建一个服务器,仍然修改D:\node\index.js:

let http = require('http')http.createServer(() => {  console.log('我来啦')}).listen(8080)

命令行执行node index.js,接着新开一个浏览器窗口,访问localhost:8080,现在再打开命令行工具,发现已经打印了“我来啦”(访问多少次就打印多少次),再继续修改index.js

let http = require('http')// 加入请求和响应参数    http.createServer((req, res) => {  // 在页面上打印‘index’  res.write('index')  // 需要标明结束  res.end()  // 或者直接  res.end('index')}).listen(8080)

命令行执行node index.js,浏览器访问localhost:8080,页面出现“index”:

为了让页面内容丰富一点,我们在D:\node\下新建一个网页文件a.html,内容为一句话加一张图(准备一张图片blog.jpg放入D:\node\):

<!DOCTYPE html><html><head>  <title>Page Title</title></head><body>  <h1>Welcome To My Blog</h1>  <img src='./blog.jpg' alt='img'/></body></html>

这里需要使用上面讲到的fs文件读写的内容,修改index.js

let http = require('http')// 需要读网页和图片文件let fs = require('fs')http.createServer((req, res) => {  // req.url就是需要访问的文件路径:/a.html 和 /blog.jpg  fs.readFile(`.${req.url}`, (err, data) => {    if (err) {      res.writeHead(404)      res.end('404 page not found!')    } else {      res.end(data)    }  })}).listen(8080)

命令行执行node index.js,浏览器访问localhost:8080/a.html

也可以直接访问图片localhost:8080/blog.jpg

下一篇《Node基础入门(三):数据交互》

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Node基础入门(二):模块

发表回复