回顾与思考
已经掌握了哪些技术:html
、css
、javascript
浏览器中的javascript
的组成部分:JS核心语法
+ WebAPI
(思考)为什么JavaScript可以在浏览器中被执行:不同的浏览器使用不同的JavaScript解析引擎。
Chrome
浏览器 => V8Firefox
浏览器 => OdinMonkey(奥丁猴)Safri
浏览器 => JSCoreIE
浏览器 => Chakra(查克拉)(思考)为什么JavaScript可以操作DOM和BOM:每个浏览器都内置了DOM、BOM这样的API函数,因此,浏览器中的JavaScript才可以调用它们。
浏览器中的JavaScript运行环境:运行环境是指代码正常运行所需的必要环境。
V8引擎复杂解析和执行JavaScript代码。
内置API是由运行环境提供的特殊接口,只能在所属的运行环境中被调用。
Node.js简介
什么是Node.js
:是一个基于Chrome V8
引擎的JavaScript运行环境。
Node.js中的JavaScript运行环境:
Node.js可以做什么
Node.js作为一个JavaScript的运行环境,仅仅提供了基础的功能和API。然而基于Node.js提供的这些基础功能,有很多强大的工具和框架如雨后春笋,层出不穷。
Express
框架,可以快速构建Web应用。Electron
框架,可以构建跨平台的桌面应用。restify
框架,可以快速构建API接口项目。Node.js的环境安装
LTS
版本和Current
版本的不同:
node -v
后,按下回车键,即可查看已安装的Node.js的版本号。在Node.js环境中执行JavaScript代码
node 要执行的js文件路径
什么是fs文件系统模块
fs模块是Node.js官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
fs.readFile()
方法:用来读取指定文件中的内容。fs.writeFile()
方法,用来向指定的文件中写入内容。如果要在JavaScript代码中,使用fs模块来操作文件,则需要是用如下的方式先导入它:
const fs = require('fs');
读取指定文件中的内容
fs.readFile()
的语法格式:
fs.readFile(path[, options], callback);
参数1:必选参数,字符串,表示文件路径。
参数2:可选参数,表示以什么编码格式来读取文件。
参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果。
实例代码
const fs = require('fs')
fs.readFile('./files/11.txt', 'utf8', function(err, dataStr) {
// 如果读取失败,则 err 的值为 错误对象,dataStr 的值为 undefined
console.log(err)
console.log('-------')
// 如果读取成功,则 err 的值为 null
console.log(dataStr)
})
向指定的文件中写入内容
fs.writeFile()
的语法格式
fs.writeFile(file, data[, options], callback);
data
:必选参数,表示要写入的内容。其他参数跟fs.readFile(path[, options], callback)
一样。
代码示例
const fs = require('fs')
fs.writeFile('./files/3.txt', 'ok123', function(err) {
// 如果文件写入成功,则 err 的值等于 null
// 如果文件写入失败,则 err 的值等于一个 错误对象
console.log(err);
})
路径动态拼接的问题
在使用fs模块操作文件时,如果提供的操作路径是以./
或../
开头的相对路径时,很容易出现动态路径拼接错误的问题。
原因:代码在运行的时候,会执行node命令时所处的目录,动态拼接出被操作文的完整路径。
解决方案:在使用fs模块操作文件时,直接提供完整的路径,不要提供./
或../
开头的相对路径,从而防止路径凭借的问题。
// __dirname表示当前文件所处的目录
fs.readFile(__dirname + '/files/1.txt', 'utf8', function (err, dataStr) {
if (err) {
return console.log('读取文件失败:' + err.message);
}
console.log('读取文件成功:' + dataStr);
})
什么是path路径模块
path
模块是Node.js
官方提供的,用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理需求。
path.join()
方法,用来将多个路径片段拼接成一个完整的路径字符串。path.basename()
方法,用来从路径字符串中,将文件名解析出来。如果要在JavaScript代码中,使用path模块来锤路径,则需要使用如下的方式先导入它:
const path = require('path');
路径拼接
path.join()
的语法格式
使用path.join()
方法,可以把多个路径片段拼接为完整的路径字符串,语法格式如下:
path.join([...paths])
注意:今后凡是涉及到路径拼接的操作,都要使用path.join()
方法进行处理。不要直接使用 + 进行字符串的拼接。
获取路径中的文件名
path.basename()
的语法格式
使用path.basename()
方法,可以获取路径中的最后一部分,经常通过这个方法获取路径中的文件名,语法格式如下:
path.basename(path[, ext]);
path.extname()
的语法格式
使用path.extname()
方法,可以获取路径中的扩展名部分,语法格式如下:
path.extname(path);
什么是http模块
什么是客户端?什么是服务器? 在网络节点中,负责消费资源的电脑,叫做客户端。负责对外提供网络资源的电脑,叫做服务器。
http模块是Node.js
官方提供的、用来创建web服务器的模块。通过http模块提供的http.createServer()
方法,就能方便的把一台普通的电脑,变成一台Web服务器,从而对外提供Web资源服务。
如果要希望使用http模块创建Web服务器,则需要先导入它:
const http = require('http');
服务器相关的概念
IP地址
IP地址就是互联网上每台计算机的唯一地址,因此IP地址具有唯一性。
IP地址的格式:通常用"点分十进制"表示成(a.b.c.d)的形式,其中,a,b,c,d都是0-255之间的十进制整数。
注意:
域名与域名服务器
尽管IP地址能够唯一地标记网络上的计算机,但IP地址是一长串数字,不直观,而且不便于记忆,于是人们又发明了另一套字符型的地址方案,即所谓的域名(Domain Name)地址。
IP地址和域名是一一对应的关系,这份对应关系存放在一种叫做域名服务器(DNS, Domain name server)的电脑中。使用者只需通过好记的域名访问对应的服务器即可,对应的转换工作由域名服务器实现。因此,域名服务器就是提供IP地址和域名之间的转换服务的服务器。
注意:
端口号
在一台电脑中,可以运行成百上千个Web服务,每个Web服务都对应一个唯一的端口号。客户端发送过来的过来的网络请求,通过端口号,可以被准确地交给对应的Web服务进行处理。
注意:
创建最基本的Web服务器
导入http模块
const http = require('http');
创建web服务器实例
const server = http.createServer();
为服务器实例绑定request事件,监听客户端的请求。
// req是请求对象, 它包含了与客户端相关的数据和属性
// res是响应对应, 它包含了与服务器相关的数据和属性
server.on('request', (req, res) => {
const url = req.url;
const method = req.method;
const str = `您请求的URL地址是${req.url}, 请求的method类型为${req.method}`;
// 防止中文乱码
res.setHeader('Content-Type', 'text/html; charset=utf-8');
console.log(str);
res.end(str);
})
启动服务器
server.listen(80, () => {
console.log('server running at http://127.0.0.1');
})