1、不同浏览器使用不同的javaScript引擎
chrome => v8
Firefox => OdinMonkey(奥丁猴)
safri => JSCore
IE浏览器=>Chakra(查克拉)
2、node是一个基于chrome v8引擎的javaScript运行环境
浏览器是JavaScript的前端运行环境,node.js是JavaScript的后端运行环境
node.js中无法调用DOM和BOM等浏览器内置API。
3、node简单操作
查看node版本号 node -v
运行js文件 node 文件名
4、fs文件系统模块
fs是Node.js官方提供的、用来操作文件的模块
fs.readFile(); // 读取指定文件内容
fs.writeFile();//向指定文件中写入内容
JavaScript引入fs模块
const fs = require('fs')
(1)读取指定文件内容
// fs.readFiles(path[,option],callback)
// 参数1:必选参数,字符串,表示文件的路径。
// 参数2:可选参数,表示以什么编码格式来读取文件。
// 参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果,
const fs = require('fs');
fs.readFile('read.txt','utf8',function(err,dataStr){console.log(err);console.log(dataStr);
})fs.readFile('read.txt','utf8',function(err,dataStr){if(err){return console.log(err);}console.log(dataStr);
})
(2)向指定文件写入内容
/ fs.readFile(file,data[,option],callback)
// 参数1:必选参数,文件的路径字符串,表示文件存放路径。
// 参数2:必选参数,表示写入内容。
// 参数2:可选参数,表示以什么编码格式来读取文件,默认utf8。
// 参数3:必选参数,文件写入完成后,通过回调函数拿到读取的结果,、const fs = require('fs');fs.writeFile('read.txt','hello!',function(err){if(err){return console.log("文件写入失败:"+err);}else{console.log("文件写入成功");}
})
如果成功 err==null 否则err返回一个错误对象
记事本中换行:\r\n
路径参数时, \ 要写成 \\
process、__filename、__dirname
// 当前文件位置,绝对路径
console.log('__filename', __filename);
// 当前文件目录路径
console.log('__dirname', __dirname);
// 命令行的根路径 process进程对象,唯一对象
console.log('process.cwd()', process.cwd());
// 输出环境变量
console.log(process.env);
5、path模块
path 模块是 Node.is 官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理需求。
(1)path.join() 方法,用来将多个路径片段拼接成一个完整的路径字符串
(2)path.basename() 方法,用来从路径字符串中,将文件名解析出来
(3)path.extname() 方法,获得路径扩展名
const path = require('path');
let resPath = path.join('a', 'b', 'c', '../', 'def/g'); // 不校验路径的合法性
// 相对路径获取其对应的绝对路径
let resolvePath = path.resolve('./a/b', 'c/d', 'e', 'xxx.txt');
// 进一步操作路径,以对象的方式解析路径
let pathObj = path.parse(resolvePath);const fullName = path.basename('/a/b/index.html'); // index.html
const nameWithoutExt = path.basename('/a/b/index.html','.html');
路径中 ../会抵消前面的路径
路径拼接使用 path.join(__dirname,'123.txt');,不要使用 “ + ” 。
6、http模块
(1)IP地址
客户端:负责消费资源的电脑
服务器:负责对外提供网络资源的电脑
http模块是node提供的,普通电脑可以通过http.createServer()方法变成服务器。
IP地址:在互联网上每台电脑唯一地址,格式--点分十进制,
ping IP地址
自身IP地址,测试 127.0.0.1
(2)域名和域名服务器
字符型地址方案-域名地址
域名服务器是提供IP地址和域名之间转换服务的服务器
127.0.0.1 ==> localhost
(3)端口号
- 每个端口号不能同时间被多个web服务占用
- URL中80端口可以省略
(4)创建最基本web服务器
创建 web 服务器的基本步骤
① 导入 http 模块
const http = require('http')
② 创建 web 服务器实例
调用http.createServer()方法,即可快速创建一个web服务器实例
const server = http.createServer()
③ 为服务器实例绑定 request 事件,监听客户端的请求
// 使用服务器实例 .on() 方法,为服务器绑定一个request事件
server.on('request',(req, res)=>{// 只要有客户端来请求我们自己的服务器,就会触发request事件,从而调用这个事件处理函数console.log('Someone visit our web server')})
④ 启动服务器
调用服务器实例的 .listen()方法,即可启动当前的web服务器实例:
server.listen(80, ()=>{console.log('http server running at http://127.0.0.1')})
(5) req请求对象
只要服务器接收到客户端得请求,就会调用通过server.on()为服务器绑定request事件处理函数
如果想在事件处理函数中访问客户端相关的数据或属性,可以用req请求对象
server.on('request', function (req, res) {const url = req.url;const method = req.method;
})
(6) res响应对象
访问与服务器相关得数据或属性,采用res.end
server.on('request', function (req, res) {const url = req.url;const method = req.method;const str =`request is ${url},method is ${method}`// 调用res.end()方法,向客户端响应内容res.end(str);
})
中文乱码问题
res.setHeader('Content-Type','text/html; charset=utf-8');
(7) 不同url响应不同页面
① 获取请求得url地址
② 设置默认响应内容
③ 判断用户请求得是否为/ 或/index.html首页
④ 判断用户请求得是否为 /其他页面
⑤ 设置响应头,防止乱码
⑥ 使用res.end()把内容响应给客户端
const http = require('http')
const server = http.createServer()
server.on('request', function (req, res) {const url = req.url;let content = '<h1>404 Not found!</h1>';if(url==='/'|url==='/index.html'){content = '<h1>首页</h1>'}else if(url === '/about.html'){content = '<h1>about页面</h1>'}res.setHeader('Content-Type','text/html; charset=utf-8');// 调用res.end()方法,向客户端响应内容res.end(content);
})
server.listen(80, function () {console.log('server running at http://127.0.0.1:80')
})