1、准备工作
(1)浏览器中的JS:JS核心语法(ECMAScript)+WebAPI
(2)为什么JS可以在浏览器中执行?
浏览器中有JS解析引擎:每个浏览器的解析引擎都不一样,Chrome浏览器中的V8解析引擎最好。
(3)为什么JS可以操作DOM和BOM?
每个浏览器内置了BOM和DOM函数,浏览器中的JS才可以调用。
(4)浏览器中的JS运行环境
运行环境:代码正常运行所需的必要条件。浏览器也是一个运行环境,执行JS:V8引擎+内置API
内置API:由运行环境提供的特殊的接口,只能在所属的运行环境中被调用;包括DOM+BOM+Canvas+XMLHttpRequest+JS内置对象+……
(5)JS可以做后端开发,需要借助Node.js
2、初识Node.js
(1)Node.js中的JavaScript运行环境
- 浏览器是JavaScript的前端运行环境
- Node.js是JavaScript的后端运行环境
- Node.js中无法调用DOM和BOM等浏览器内置API,因为Node.js是一个单独的运行环境
(2)学习路径:JS基础语法+Node.js内置模块(fs,path,http)+第三方API模块(express, mysql)
3、在Node.js环境中执行JS代码
node JS代码存放路径
4、终端中的快捷键
⬆️ 上次所执行的命令
tab键 自动补全文件的路径
ESC键 清空当前已经输入的命令
cls 清空终端
cd 文件夹X 切换终端到下一层文件夹X
cd.. 切换终端到上一层文件夹
5、fs文件系统模块(操作文件)
(1)读取文件内容 fs.readFile(path[,options], callback)
path:文件路径
options:编码格式
callback(err, dataStr):回调函数
err:读取时的错误信息
dataStr:读取到的内容
// 导入fs模块
const fs = require('fs')
fs.readFile('./files/1.txt', 'utf8', (err, str) => {
console.log(err);
console.log(str);
})
/**
* 如果文件读取成功,err=null,str=文件内容
* 如果文件读取失败,err=错误对象,str=undefined
*/
(2)写入文件内容 fs.writeFile(file, data[,options], callback)
file:文件的存放路径
data:写入的文件内容
options:编码格式
callback(err):回调函数
const fs = require('fs')
fs.writeFile('./files/2.txt', '0987654321', function(err) {
console.log(err);
})
/**
* 1、默认写入格式为utf8
* 2、如果文件不存在,会创建新的文件并写入
* 3、如果之前文件已存在,会使用新内容覆盖旧的内容
* 4、写入成功:err=null
* 写入失败:err=错误对象
*/
(3)fs路径动态拼接
在路径拼接时,默认以终端运行的目录开始拼接,为避免路径错误,因此进行动态拼接
__dirname:当前代码文件所处的目录
const fs = require('fs')
// 使用__dirname拼接的路径是绝对路径,文件在哪里运行都可以正确读取到文件
fs.readFile(__dirname + '/files/1.txt', 'utf8', function(err, res) {
if (err) {
return console.log(err.message)
}
console.log(res);
})
6、path路径模块
(1)path.join([...paths])
path.join()可以拼接多个路径,../会抵消一层路径
使用path.join()拼接路径时,如果路径片段有./,会自动忽略,而使用+进行拼接时,不能识别并忽略./
(2)path.basename(path[,ext])
从path文件路径中,获取到文件名称,如果有ext扩展名,则获取到去掉扩展名的文件名称,扩展名要加.
(3)path.extname(path)
获得路径path中文件的扩展名
7、http模块:创建web服务器
(1)服务器相关概念
-
IP地址:互联网上每台计算机的唯一地址,每台电脑都有自己的IP地址
格式:a.b.c.d a, b, c, d都是0~255之间的十进制整数
自己的电脑也是一台服务器,IP地址为:127.0.0.1
-
域名和域名服务器
域名是字符型的地址方案,IP和域名是一一对应的关系,这种对应关系存在域名服务器中
127.0.0.1的域名是:localhost
-
端口号:每个Web服务都对应一个唯一的端口号,客户端发送的网络请求,通过端口号,可以准确交给对应的Web服务进行处理
每个端口号不能同时被多个Web服务占用
在实际应用中,URL中的80端口可以被省略
(2)创建Web服务器
// 1、导入http模块
const http = require('http')
// 2、创建Web服务器:http.createServer()
const server = http.createServer()
// 3、为服务器实例绑定request事件,监听客户端发送的请求:实例.on()
server.on('request', (req, res) => {
console.log('Someone visit our web server');
})
// 4、启动服务器:实例.listen()
server.listen(80, function() {
console.log('Server running at http://127.0.0.1');
})
(3)req请求对象:可以访问到与客户端相关的数据和属性
(4)res响应对象:可以访问与服务器相关的数据或属性,使用res.end()进行响应
const http = require('http')
const server = http.createServer()
server.on('request', (req, res) => {
const str = `Your request url is ${req.url}, and request method is ${req.method}`
res.end(str)
})
server.listen(80, () => {
console.log('server running at http://127.0.0.1');
})
(5)解决中文乱码问题
res.setHeader('Content-Type', 'text/html; charset=utf-8')
(6)根据请求的URL地址,请求不同的内容
const http = require('http')
const server = http.createServer()
server.on('request', (req, res) => {
// 1、获取请求的URL地址
const url = req.url
// 2、设置默认的响应内容
let content = '<h1>404 Not Found</h1>'
// 3、判断用户请求的是哪一个地址
if (url == '/' || url == '/index.html') {
content = '<h1>首页</h1>'
} else if (url == '/about.html') {
content = '<h1>关于</h1>'
}
// 4、设置响应头,防止中文乱码
res.setHeader('Content-Type', 'text/html;charset=utf-8')
// 5、使用res.end()把内容响应给客户端
res.end(content)
})
server.listen(80, () => {
console.log('server running at http://127.0.0.1');
})