Node.js
1.Node常用命令
↑箭头快速定位到上一条命令
tab键快速补全文件路径
使用esc键快速清空命令
使用cls命令可以清空终端
2.fs文件系统模块
fs模块是Node.js官方提供的用来操作文件的模块,它提供了一系列的方法和属性,用来满足用户对文件的操作需求
fs.readFile()方法,用来读取指定文件中的内容
fs.writeFile()方法,用来向指定的文件中写入内容
如果要使用 要先导入fs模块
eg:const fs=require('fs');
2.1fs.readFile()的语法格式
//1.导入fs模块
const fs = require('fs');
//2.调用fs.readFile()方法读取文件
//参数1:读取文件的存放路径
//参数2:读取文件时候采用的编码格式,一般默认指定utf8
//参数3:回调函数,拿到读取失败和成功的结果 err dataStr
fs.readFile('./files/11.txt', 'utf8', function(err, dataStr) {
console.log(err);
//如果读取成功则err的值为null
//如果读取失败则err的值为错误对象 dataStr的值为undefined
console.log('***********');
console.log(dataStr);
})
判断文件是否读取成功
const fs = require('fs');
fs.readFile('./files/1.txt', 'utf8', function(err, dataStr) {
if (err) {
return console.log('读取文件失败!' + err.message);
}
console.log('读取文件成功' + dataStr);
})
2.2fs.writeFile()
注意:fs.writeFile()方法只能用来创建文件,不能用来创建路径
重复调用的话新内容会覆盖旧内容
const fs = require('fs');
//参数1:表示文件的存放路径
//参数2:表示要写入的内容
//参数3:回调函数
fs.writeFile('f:./files/2.txt', 'abcd', function(err) {
//如果文件写入成功,则err的值为null
//如果文件写入失败,则err的值为一个错误对象
console.log(err);
})
const fs = require('fs');
//参数1:表示文件的存放路径
//参数2:表示要写入的内容
//参数3:回调函数
fs.writeFile('./files/3.txt', 'abcd', function(err) {
//如果文件写入成功,则err的值为null
//如果文件写入失败,则err的值为一个错误对象
// console.log(err);
if (err) {
return console.log(('文件写入失败' + err.message));
}
console.log('文件写入成功');
})
2.3fs模块 路径动态拼接的问题
——dirname表示当前文件所处的目录
//__dirname表示当前文件所处的目录
const fs = require('fs');
fs.readFile(__dirname + '/files/1.txt', 'utf8', function(err, dataStr) {
if (err) {
return console.log('读取文件错误!' + err.message);
}
console.log(dataStr);
})
3.path路径模块
path.join()方法用来将多个路径片段拼接成一个完成的路径字符串
paht.basenname()方法,用来从路径字符串中,将文件名解析出来
导入:
const path=require(‘path);
path.join()方法用来将多个路径片段拼接成一个完成的路径字符串
const path = require('path');
const fs = require('fs');
//注意 ../会抵消前面的路径
const pathstr = path.join('/a', '/b/c', '../', '/d', 'e');
console.log(pathstr);
// fs.readFile(path.join(__dirname, './files/1.txt'), 'utf8', function(err, dataStr) {
// if (err) {
// return console.log(err.message);
// }
// console.log(dataStr);
// })
paht.basenname()方法,用来从路径字符串中,将文件名解析出来
const path = require('path');
//定义文件的存放路径
const fpath = '/a/b/c/index.html';
// const fullname = path.basename(fpath);
// console.log(fullname);//index.html
const nameWithout = path.basename(fpath, '.html');
console.log(nameWithout);//index
path.extname()可以获取路径中的扩展名部分
const path = require('path');
//定义文件的存放路径
const fpath = '/a/b/c/index.html';
const fext = path.extname(fpath);
console.log(fext);//.html
4.http模块
const http=require('http');
创建基本web服务器
//1.导入http模块
const http = require('http');
//2.创建web服务器实例
const server = http.createServer();
//3.为服务器实例绑定request事件,监听客户端的请求
server.on('request', function(req, res) {
console.log('Someone visit our web sever.');
})
//4.启动服务器
server.listen(80, function() {
console.log('server running at http://127.0.0.1');
})
4.1reg请求对象
只要服务器接收到了客户端的请求,就会调用通过server.on()为服务器绑定的request事件处理函数,如果想在事件处理函数中访问与客户端的数据或属性,可以使用如下方式
const req = require('express/lib/request');
const http = require('http');
const server = http.createServer();
//req是请求对象,包含了与客户端相关的数据和属性
server.on('request', (req) => {
//req.url是客户端请求的url地址
const url = req.url;
//req.method是客户端请求的method类型
const method = req.method;
const str = `Your request url is ${url},and rquest method is ${method}`;
console.log(str);
});
server.listen(80, () => {
console.log('server running at http://127.0.0.1');
})
4.2res响应对象
在服务器的request事件处理函数中,如果想访问与服务器相关的数据或属性,可以使用如下的方式
const req = require('express/lib/request');
const http = require('http');
const server = http.createServer();
//req是请求对象,包含了与客户端相关的数据和属性
server.on('request', (req, res) => {
//req.url是客户端请求的url地址
const url = req.url;
//req.method是客户端请求的method类型
const method = req.method;
const str = `Your request url is ${url},and rquest method is ${method}`;
console.log(str);
//调用res.end()方法,向客户端响应一些内容
res.end(str);
});
4.3解决中文乱码问题
const http = require('http');
const server = http.createServer();
server.on('request', (req, res) => {
const url = req.url;
const method = req.method;
const str = `您请求的URL地址是${url},请求的mthode类型是 ${method}`;
//调用res.setHeader()方法,设置Content-Type响应头,解决中文乱码问题
res.setHeader('Content-Type', 'text/html; charset=utf-8')
res.end(str);
})
server.listen(80, () => {
console.log('server running at http://127.0.0.1');
})
4.4根据不同的url响应不同的html内容
const req = require('express/lib/request');
const res = require('express/lib/response');
const http = require('http');
const server = http.createServer();
server.on('request', (req, res) => {
//1.获取请求的url地址
const url = req.url;
//2.设置默认的响应内容为404 Not found
let content = '<h1>404 Not found!</h1>';
//3.判断用户请求的是否为/或index.html首页
if (url === '/' || url === '/index.html') {
content = '<h1>首页</h1>'
} else if (url === '/about.html') {
content = '<h1>关于页面</h1>'
}
//4.判断用户请求的是否为/about.html页面
//5.设置响应头,防止乱码
res.setHeader('Content-Type', 'text/html; charset=utf-8')
//6.使用res.end()把内容响应给客户端
res.end(content);
});
server.listen(80, () => {
console.log('server running at http://127.0.0.1');
})
5.综合时钟案例
//1.导入http模块
const http = require('http');
//1.2导入fs模块
const fs = require('fs');
//1.3导入path模块
const path = require('path');
//2.1创建web服务器
const server = http.createServer();
//2.2监听web服务器的request事件
server.on('request', (req, res) => {
//3.1获取到客户端请求的url地址
const url = req.url;
//3.2把请求的url地址映射为具体文件的存放路径
// const fpath = path.join(__dirname, url)
//5.1预定一个空白的文件存放路径
let fpath = '';
if (url === '/') {
fpath = path.join(__dirname, '/clock/index.html')
} else {
fpath = path.join(__dirname, '/clock', url);
}
//4.1根据映射过来的文件路径读取文件内容
fs.readFile(fpath, 'utf-8', (err, dataStr) => {
//4.2读取失败,向客户端响应固定错误消息
if (err) return res.end('404 Not found!')
//4.3读取成功,将读取成功的内容,响应给客户端
res.end(dataStr);
})
})
//2.3启动服务器
server.listen(80, function() {
console.log('server is running at http://127.0.0.1');
})
6.require()方法
使用require()方法加载其他模块时,会执行被加载模块中的代码
注意“在使用require加载用户自定义模块期间可以省略.js后缀名
7.模块作用域
- 和函数作用域类似,在自定义模块中定义的变量、方法等成员,只能在当前模块内被访问,这种模块级别的访问限制,叫做模块作用域
- 防止全局变量污染
8.向外共享模块作用域中的成员
- 自定义模块中都有一个
module对象,存储了和当前模块有关的信息 - 在自定义模块中,可以使用
module.exports对象,将模块内的成员共享出去,供外界使用。导入自定义模块时,得到的就是module.exports指向的对象。 - 默认情况下,
exports和module.exports指向同一个对象。最终共享的结果,以module.exports指向的对象为准。
8.1module.exports对象
在一个自定义模块中,默认情况下module.exports={};
9.模块化规范
- 每个模块内部,
module变量代表当前模块 module变量是一个对象,module.exports是对外的接口- 加载某个模块即加载该模块的
module.exports属性
10.npm和包
包:第三方模块叫做包
包是基于内置模块封装出来的

浙公网安备 33010602011771号