一.fs模块
1.1 fs读取文件
//fs:file system 文件系统
//要使用一个模块的话,必须先加载该模块
// 1.加载模块,得到一个模块
const fs = require('fs')//建议名字和模块名相同
// console.log(fs);
// read File --读取文件
// fs.readFile(文件路径,可选参数,回调函数处理读取的内容);
fs.readFile('./demo.html', 'UTF-8',(err,data) =>{
//err 表示是否有错误,有错误的话,err表示错误信息;没有错误err是undefined
if(err){
console.log(err)//如果有错误,输出错误
return;//阻止后续代码
}
console.log(data);
})
1.2写入文件
// 1.加载fs模块
const fs = require('fs');
// 2.调用writeFile方法,写入文件
// 该方法会将文件中原有的内容覆盖掉
// 该方法如果发现文件不存在则会自动创建文件
// fs.writeFile(文件路径,写什么内容,回调函数查看是否有错误);
fs.writeFile('./demo1.txt','how are you',(err) =>{
if(err){
console.log(err);
}else{
console.log('写入成功');
}
})
二.querystring模块
//使用模块,先加载
const querystring = require('querystring');
//parse方法,是querystring对象中封装的,和JSON.parse不是一个方法
// parse方法,是将查询字符串 转成js对象
let result = querystring.parse('id=456&name=zhangsan&age=20')
console.log(result);//输出内容{ id: '456', name: 'zhangsan', age: '20' }
console.log(querystring.stringify(result));
三.url模块
3.1 旧的url
// 使用模块,先加载
const url = require('url');
const querystring = require('querystring');
// parse用来解析url的一个方法
let res = url.parse('http://www.baidu.com:80/test.html?id=123&age=20')
console.log(res);
//获取参数:console.log(res.query);
// 转成对象
console.log(querystring.parse(res.query));
3.2 新的url
// 新的api方法
const myUrl = new URL('http://www.baidu.com:80/test.html?id=123&age=20');
console.log(myUrl);//是一个解析后的对象,包含了url的各个组成部分console.log(myUrl.searchParams);//URLSearchParams { 'id' => '123', 'age' => '20' }
// 获取id参数:必须调用searchParams对象中的get方法来获取
console.log(myUrl.searchParams.get('id'))
四.http模块(主要)
http服务器处理模块,可以使用http模块搭建一个服务器
http是一个系统模块,让我们能够通过简单的流程创建一个web服务器
4.1 搭建web服务器
//使用http模块搭建服务器
// 1.加载http模块
const http = require('http');
// 2.调用http模块中的createServer方法,创建服务器
const server = http.createServer();
// 3.启动服务器,并且要为服务器设置端口
server.listen(3000,() =>{
console.log('服务器启动了')
});//监听端口
// 4.添加request事件,用于处理所有的http请求
server.on('request',() =>{
console.log('你的请求收到了');
})
4.2 对浏览器的请求做出响应
当收到浏览器的请求后,会触发request事件,其实就是触发request事件的处理函数(该函数有两个核心参数request和response)
//使用http模块搭建服务器
// 1.加载http模块
const http = require('http');
// 2.调用http模块中的createServer方法,创建服务器
const server = http.createServer();
// 3.启动服务器,并且要为服务器设置端口
server.listen(3000,() =>{
console.log('服务器启动了')
});//监听端口
// 4.添加request事件,用于处理所有的http请求
server.on('request',(req,res) =>{
// 事件处理函数有两个参数
// 参数1:表示request,所有和请求相关的信息,都可以通过request对象来接收
// 参数2:表示response,所有和响应相关的信息,都可以使用response对象来处理
console.log('你的请求收到了');
//通过res.setHeader()方法,来设置响应头
res.setHeader('Content-Type','text/html;charset=utf-8')
//通过res对象的一个方法end来对浏览器做出响应
//res.end()方法的作用,是将响应报文(响应行、响应头、响应体)返回给浏览器
res.end('请求收到了');
})
4.3对浏览器的请求做出响应,返回html
const http = require('http');
const fs = require('fs');
//调用createServer
const sever = http.createServer();
//注册request,监视浏览器的请求
sever.on('request',(req,res)=>{
// 当有请求过来,则去读取demo,html文件并将读取的结果返回给浏览器
fs.readFile('./demo.html','utf-8',(err,data)=>{
if(err){
return console.log(err);//输出错误信息并终止程序继续执行
}
// 如果读文件没有错误,则将读取的内容data返回给浏览器 res.setHeader('Content-Type','text/html;charset=utf-8')
res.end(data);
})
})
sever.listen(4000,()=>console.log('sever start'))
4.4 根据不同的url做出不同的响应
const http = require('http');
const server = http.createServer();
server.listen(5000,() => console.log('开始启动'));
server.on('request',(req,res) => {
// console.log(req);
/* req.url 表示请求的url,形如/index.html req.method 表示请求方式,比如GET req.headers 表示所 有的请求头,是一个对象 */
let url = req.url
//判断,根据url返回信息
if(url === '/index.html'){
//读取index.html 并返回内容
res.setHeader('content-type','text/html;charset=utf-8')
res.end('请求的是index.html')
}else if(url === '/getMsg'){
res.setHeader('content-type','text/html;charset=utf-8')
res.end('请求的是getMsg接口')
}else{
//服务器没有浏览器请求的文件或借口
res.setHeader('content-type','text/html;charset=utf-8')
res.statusCode = 404;
res.end('你请求的文件不存在');
}
})
4.5 处理浏览器POST方式提交的数据
const http = require('http');
const server = http.createServer()
server.listen(8000,() => console.log('服务启动'));
server.on('request',(req,res) => {
//首先判断,请求是否是POST请求
if(req.method ==='POST' && req.url === '/addMsg'){
// console.log(12354);
//服务器端接收数据的时候,是分段接收的
//需要data事件,将浏览器发送过来的数据,拼接到一起
let str = '';
req.on('data',(chunk) => {
str += chunk;
});
//如果已经将全部数据接收到了,则触发另外end事件,在这个事件中,就可以获取到所有的数据
req.on('end',() => {
console.log(str);
})
}
})
4.6 处理静态资源
const http = require('http');
const fs = require('fs');
const server = http.createServer();
server.listen(5000,() => console.log('服务器启动'));
server.on('request',(req,res) => {
//判断请求的是index.html,则读取文件,并返回内容
if(req.url === '/index.html'){
fs.readFile('./index.html','utf-8',(err,data) => {
if(err){
return console.log(err);
}
res.end(data);
});
}else if(req.url === '/index.css'){
fs.readFile('./index.css','utf-8',(err,data) => {
if(err){
return console.log(err);
}
res.end(data)
})
}else if(req.url === '/171605405.jpg'){
fs.readFile('./171605405.jpg',(err,data) => {
if(err){
return console.log(err);
}
res.end(data)
})
}
})
4.6.1 处理静态资源,若多个图片和css文件时,如何处理
const http = require('http');
const fs = require('fs');
const server = http.createServer();
server.listen(5000,() => console.log('服务器启动'));
server.on('request',(req,res) => {
//判断请求的是index.html,则读取文件,并返回内容
if(req.url === '/index.html'){
fs.readFile('./index.html','utf-8',(err,data) => {
if(err){
return console.log(err);
}
res.end(data);
});
}else if (req.url.endsWith('.css')){
fs.readFile('.' + req.url , (err,data) => {
if(err){
return console.log(err);
}
res.end(data)
})
}else if(req.url.endsWith('.jpg') || req.url.endsWith('.png')){
fs.readFile('.' + req.url , (err,data) => {
if(err){
return console.log(err);
}
res.end(data)
})
}
})