初识 Node.js 与内置模块

目标:
能够知道什么是Node.js
能够知道Node.js可以做什么
能够说出Node.js 中的JavaScript的组成部分
能够使用fs模块读写操作文件
能够使用path模块处理路径
能够使用http模块写一个基本的web 服务器

1.初识 Node.js

1.1 Node.js 简介

1.什么是Node.js
Node.js is a JavaScript ru ntime built on Chrome’s V8 JavaScript engine.
Node.js是一个基于Chrome V8 引擎的JavaScript运行环境

☆ Node.js 的官网地址: https://nodejs.org/zh-cn/

2. Node.js 中的JavaScript运行环境
在这里插入图片描述
注意:

  • 浏览器是JavaScript的前端运行环境。
  • Node.js是JavaScript的后端运行环境。
  • Node.js 中无法调用DOM和BOM等浏览器内置API。

Node.js 特性:

  • event-driven事件驱动
  • non-blocking I/O model 非阻塞IO模型(异步)
  • lightweight and efficient 轻量高效

3.Node.js 可以做什么

  • Web服务器后台
  • 命令行工具
    • npm(node)
    • git(c语言)
    • hexo(node)
    • 等等
  • 对于前端开发军程师来讲,接触 node最多的是它的命令行工具。自己写的很少,主要是使用别人第三方的
    • webpack
    • gulpo npm

4.Node.js 怎么学
浏览器中的JavaScript学习路径:
JavaScript基础语法+浏览器内置API(DOM + BOM) + 第三方库(jQuery、art-template等)

Node.js 的学习路径:
JavaScript 基础语法 + Node.,js 内置API模块(fs、path、http等)+第三方API模块(express、mysql等)

1.5.一些资源·

  • 《深入浅出Node.js》
  • 《Node.,js权威指南》
  • JavaScript标准参考教程(alpha) : http://javascript.ruanyifeng.com/
  • Node 入门:http://www.nodebeginner.org/index-zh-cn.html
  • 官方API文档: https://nodejs.org/dist/latest-v6.x/docslapil
  • 中文文档(版本比较旧,凑合看):http://www.nodeclass.com/api/node.html
  • CNODE社区:http:/lcnodejs.org
  • CNODE-新手入门: http://cnodejs.org/getstart

1.2 Node.js 环境安装

如果希望通过 Node.js 来运行Javascript 代码,则必须在计算机上安装 Node.js 环境才行。

安装包可以从Node.js的官网首页直接下载,进入到Node.js 的官网首页(https://nodejs.org/en/),点击绿色的按钮,下载所需的版本后,双击直接安装即可。
如果已经安装过,重新安装,会进行覆盖升级。
这个地方不建议修改安装目录
在这里插入图片描述
其余页面,默认下一步即可。

2.确认Node 环境 是否安装成功
打开终端,在终端输入命令 node -v 后,按下回车键,可查看已安装的 Node.js的版本号,则安装成功。

1.4 在 Node.js 环境中执行 JavaScript 代码

步骤:

  1. 打开终端
  2. 进入代码文件所在的文件目录
  3. 输入 node + 空格 + 要执行的js文件的相对路径

小技巧:在 Visual Studio Code 软件中,使用快捷键 Ctrl + ~,可以在软件中打开终端窗口。

浏览器中 的 JavaScript 是由 JS 核心语法 和 WebAPI 组成的。
浏览器中有 JavaScript 解析引擎,可以解析并执行 JavaScript 代码。

JavaScript 操作 DOM 和BOM 的原理:
每个浏览器都内置了DOM、BOM这样的API函数,因此,浏览器中的JavaScript才可以调用它们。
在这里插入图片描述
浏览器中的 JavaScript 运行环境
☆ 运行环境是指代码正常运行所需的必要环境。
在这里插入图片描述1. V8 引擎负责解析和执行 JavaScript 代码
2. 内置 API 是由运行环境提供的特殊接口,只能在所属的运行环境中被调用

2. fs 文件系统模块

fs文件系统模块是Node,js官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
例如:

  • fs.readFile()方法,用来读取指定文件中的内容
  • fs.writeFile()方法,用来向指定的文件中写入内容

2.1 导入 fs 文件系统模块

如果要在JavaScript 代码中,使用fs模块来操作文件,则需要使用require函数先导入它:

const fs = require('fs')

2.2 读取指定文件中的内容

fs.readFile() 方法,读取指定文件中的内容
1.语法格式:

fs.readFile(path[, options], callback)

参数解读:

  • 参数1:必选参数,字符串,表示文件的路径。
  • 参数2:可选参数,字符串,表示以什么编码格式来读取文件。
  • 参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果。

2.示例代码
以utf8的编码格式,读取指定文件的内容,并打印err 和dataStr的值:

// 导入 fs 文件系统模块
const fs = require('fs');
fs.readFile('1.js', 'utf8', function (err, dataStr) {
	// 如果读取成功,则 error 的值为 null,datastr就是读取的数据
	// 如果读失败,则 error 的值为错误对象,dataStr的值为 undefined
    console.log(err);
    console.log(-----);
    console.log(dataStr);// 打印成功的结果
})

3.判断文件是否读取成功
可以判断 err 对象是否为 null ,从而知晓文件读取的结果

const fs = require('fs');
fs.readFile('3.js', 'utf8', function (err, dataStr) {
    if (err) {
        return console.log('文件读取失败!' + err.message);
    } 
    console.log('文件读取成功,内容是:' + dataStr);
    
})

2.3 向指定的文件中写入内容

fs.writeFile()方法,向指定的文件中写入内容
1.语法格式如下:

fs.writeFile(file,data[, options], callback)

参数解读:

  • 参数1:必选参数,需要制定一个文件路径的字符串,表示文件的存放路径
  • 参数2:必选参数,表示要写入的内容
  • 参数3:可选参数,表示以什么格式写入文件内容,默认是 utf8
  • 参数4:必选参数,文件写入完成后的回调函数

注意:

  • 覆盖写入,而不是追加
  • 如果文件不存在,则会新建该文件。(写f盘,且该盘符不存在的情况下报错)

2.示例代码:

const fs = require('fs');
fs.writeFile('5.js', 'console.log("hello js~~~")', function(err){
    console.log(err)
})

3.判断文件是否写入成功

const fs = require('fs');
fs.writeFile('1.js', 'console.log("hello js~~~")', function(err){
    if (err) {
         return console.log('文件写入失败:' + err.message);
    } 
    console.log('输入成功!');
})

2.4 文件路径动态拼接的问题

1.使用相对路径
在使用fs模块操作文件时,操作路径是以 ./../ 开头的相对路径
缺点:很容易出现路径动态拼接错误的问题
(原因:代码在运行的时候,会以执行node命令时所处的目录,动态拼接出被操作文件的完整路径。)

2.使用绝对路径
在使用fs模块操作文件时,直接提供完整的路径,从而防止路径动态拼接的问题。
缺点:完整的路径–移植性非常差,不利于维护

// 文件路径字符串中的“\”为转移符号,得写2个才代表一个。
fs.write('D:\\projects\\Node\\01-文件读取.js', 'console.log("hello js~~~")', function(err){
	//
}

3.使用 __dirname(推荐使用)
__dirname 表示当前文件所处的目录

// “\\1.js” 也可以写作‘/1.js’
fs.readFile(__dirname + '\\1.js', 'utf-8', function(err){
    if (err) {
         return console.log('文件读取失败:' + err.message);
    } 
    console.log('输入成功!');
})
}

3 path 路径模块

path模块是Node,js官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理需求。
例如:

  • path.join()方法,用来将多个路径片段拼接成一个完整的路径字符串
  • path.basename()方法,用来从路径字符串中,将文件名解析出来

3.1 导入 path 模块

导入语句:

如果要在JavaScript 代码中,使用path模块来处理路径,则需要先导入它
const path = require(‘path’)

3.2 路径拼接

使用path.join()方法,将多个路径片段拼接起来。
语法格式:

path.join([…paths])

参数解读:

  • ...paths: <string>路径片段的序列
  • 返回值:<string>
const path = require('path')
// ../ 会把前面的一层路径抵消掉
const pathStr = path.join( '/a", "/b/c', '../', './d','e')
console.log(pathStr) //输出\a\b\d\e
const pathStr2 = path.join(__dirname,'./files/1.txt')
console. log(pathStr2)//输出当前文件所处目录\files\1.txt

注意:今后凡是涉及到路径拼接的操作,都要使用path.join()方法进行处理,不要直接使用 + 进行字符串的拼接。(path.join()方法可以屏蔽路径中多写的“.”)

3.3 获取路径中的文件名

使用path.basename()方法,可以获取路径中的最后一部分,经常通过这个方法获取路径中的文件名.
语法格式:

path.basename(path[, ext])

参数解读:

  • path 必选参数,表示一个路径的字符串
  • ext 可选参数,表示文件扩展名–不希望返回扩展名时填写。

返回:

  • 表示路径中的最后一部分

代码示例:

const path = require('path')
const fpath = '/a/b/c/index.html' //文件的存放路径

var fullName = path.basename(fpath)
console.log(fullName)//输出index.html

// 注意:文件的扩展名一定要写正确,否则返回的还是带扩展名的文件名。
var namewithoutExt = path.basename(fpath, '.html')
console.log(namewithoutExt)//输出index

3.4 获取路径中的文件扩展名

语法格式:

path.extname(path)

参数:
path 必选参数,表示一个路径的字符串

返回:
返回得到的扩展名字符串

示例代码:

const fpath = " /a/b/c/index.html'1/路径字符串
const fext = path.extname(fpath)
console.log(fext)1/输出.html

3.5 综合案例 - 时钟案例

372集–待补
在这里插入图片描述

4. http 模块

在网络节点中,负责消费资源的电脑,叫做客户端;负责对外提供网络资源的电脑,叫做服务器。

http模块是Node,js官方提供的、用来创建 web服务器的模块。通过 http模块提供的 http.createServer()方法,就能方便的把一台普通的电脑,变成一台Web服务器。从而对外提供Web资源服务。

4.1 http 模块的使用

最简单的 http 服务:

// 加载 http 核心模块
const  http = require('http');

// 使用 `http.createServer()`方法创建一个 Web 服务器,返回一个 Server 实例
var server = http.createSever();

// 当服务器收到客户端的请求后,自动触发服务器的 request 请求事件,然后执行第二个参数,回调处理
server.on('request', function () {
	console.log('收到客户端的请求了';
})

// 绑定端口号,启动服务器成功会调用函数。
server.listen(3000, function () {
	console.log('服务器启动成功, 可以通过http://127.0.0.1:3000/来进行访问。')
})

4.2 请求对象和响应对象

request 请求事件的处理函数,需要接受两个参数:

  • request 请求对象:请求对象可以用来获取客户端的一些请求信息,例如请求路径
  • response 相应对象: 用来给客户端发送响应信息
// 当服务器收到客户端的请求后,自动触发服务器的 request 请求事件,然后执行第二个参数,回调处理
server.on('request', function (request, response) {
	console.log('收到客户端的请求了,请求路径是:' + request.url);

	// response对象有一个方法: write可以用来给客户端发送响应数据
	// write可以使用多次,但是最后一定要使用end来结束响应,否则客户端会一直等待
	response.write('hello');
	// 告诉客户端相应对象传递完整,可以呈现给用户
	response.end();
})

以上的http服务,无论是什么请求,响应的数据都相同。(/
、/index、/login)

4.3 根据不同的请求,响应不同的内容

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值