文章目录
一.创建一个基本的node.js
- 导入http模块(http是基于http传输协议的一个服务器模块)
let http = require('http');
- 创建一个服务器createServer
let server = http.createServer(function(request,response){
console.log('服务器已经响应');
response.end('服务器已经响应');//结束语句,必须要写
});
- request–请求对象
存储web浏览器向web服务器发送的请求对象,该对象中存储一些请求信息比如,请求的URL,请求的参数,请求的方式,请求的headers等. - response–响应对象
用来实现web服务器向web浏览器响应数据的操作,该对象中存储响应过程中对应的数据比如响应的状态码,响应的内容,响应的headers等. - 设置服务器的监听端口号
server.listen(8000);//listen:监听
二.回调函数
函数A和函数B,其中函数B作为函数A的参数被传入到函数A内部.但是在函数A执行过程中通过调用函数B程序此时进入到函数B中执行,次过程产生一个回调过程,此时函数B被称为回调函数.
三.url模块和path模块
- url模块
node中内置的URL网址的解析模块 - path模块
node中内置的专门用来完成对路径的处理 - 获取当前网络请求的请求方式
GET POST PUT DELETE PATCH - 将字符串类型的网址解析成对象类型-parse(url,bool)完成网址解析
参数二是一个布尔类型的变量用来决定网址中参数的返回类型,默认为false(参数以字符串格式返回),true(参数以对象格式返回) - 对网址中路径部分做解析
let http = require('http');
//url模块--node中内置的url网址的解析模块
let url = require('url');
//path模块--node中内置的专门用来完成对路径的处理
let path = require('path');
let server = http.createServer(function (request, response) {
//获取当前网络请求的请求方式(GET, POST, PUT, DELETE, PATCH)
console.log(request.method);
//获取web端请求过程中传输的网址和参数
let url_path = request.url;
//将字符串类型的网址解析成对象类型--parse(url, bool):完成网址解析,参数2是一个布尔类型的变量用来决定网址中参数的返回类型,默认为false(参数以字符串格式返回),true(参数以对象格式返回)
let url_obj = url.parse(url_path, true);
//对网址中路径部分做解析
console.log(path.parse(url_obj.pathname));
response.end();
});
server.listen(8000);
四.url模块和path模块–路径的获取
- 获取当前文件的上一级文件夹的绝对路径—_dirname(两个)
- 获取当前文件的绝对路径—__filename
- 解析指定的路径—path.parse(__filename)
- 判断当前给定的路径是否是绝对路径—path.isAbsolute(‘路径’)
如果是返回true,否则返回false. - 路径拼接,将给定的多个字符串变量按照顺序拼接成一个完整的路径
path.join(‘变量1’,‘变量2’,‘变量3.txt’); - 按照指定格式完成路径的拼接
path_obj={
dir(目录):’ ‘,
base(基于):’ ',
}
path.format(path_obj); - 网址模块–完成对网址数据的操作
网址按照指定的格式进行拼接
{
hostname(主机名字):‘www.taobao.com’,
protocol(协议):‘https’,
search(搜索):’?name=衣服’,
pathname(路径名字):’/result’,
}
//path模块和url模块
let path = require('path');
//获取当前文件的上一级文件夹的绝对路径
console.log(__dirname);
//获取当前文件的绝对路径
console.log(__filename);
//解析指定的路径
console.log(path.parse(__filename));
//判断当前给定的路径是否是绝对路径,如果是返回true,否则返回false
console.log(path.isAbsolute('./node3.js'));
//路径拼接,将给定的多个字符串变量按照顺序拼接成一个完整的路径
console.log(path.join('aa', 'bb', 'aa.txt'));
//按照指定的格式完成路径的拼接
path_obj = {
dir:'C:\\aa\\b\\img',
base:'aa.txt'
}
console.log(path.format(path_obj));
//网址模块--完成对网址数据的操作
let url = require('url');
let url_path = 'https://www.jd.com/?cu=true&utm_source=baidu-pinzhuan&utm_medium=cpc&utm_campaign=t_288551095_baidupinzhuan&utm_term=0f3d30c8dba7459bb52f2eb5eba8ac7d_0_e752be6098f2454da3f201f242ab04fe';
//网址解析
let url_obj = url.parse(url_path, true);
console.log(url_obj);
//网址按照指定的格式进行拼接
url_obj = {
hostname:'www.taobao.com',
protocol:'https:',
search:'?name=男士护肤',
pathname:'/search/result',
}
console.log(url.format(url_obj));
五.request对象–向前端响应数据
- 设置服务器向前端返回数据的数据报头(headers)
response.writeHead(statusCode,headers);
- 参数一:状态码; 参数二:数据报头
- 数据报头:
- {Content-type(内容类型):'text/html;charset=utf-8'};
- 向前端响应数据
response.write(chunk); - 代表本次请求结束的标志
response.end();
let http=require('http');
http.createServer(function (request,response) {
//1.设置服务器向前端返回数据的数据报头(headers)
//statusCode状态码
response.writeHead(200,{'Content-type':'text/html;charset=utf-8'});
//2.向前端响应数据 chunk:流
response.write('<h1>你好</h1>');
//3.代表本次请求结束的标志
response.end();
}).listen(8001);
六.buffer二进制数据流
- 新建Buffer对象
Buffer()已经被废弃,因为它的安全性和私密性不是很好.
Buffer.alloc()直接以安全的方式分配
Buffer.allocUnsafe()不安全的方式分配
Buffer.from()根据给定的地址分配
let buf = new Buffer.alloc(100);
- 将数据写入到缓冲区
buf.write(string,encoding);//encoding:编码 默认utf-8
返回值为字节数,一个汉字三个字节,一个英文一个字节,最大返回上边设置的100.
- 二进制数据转化为字符串
let fs = require('fs');
//createReadStream创建一个可读的文件流
let reasStream = fs.createReadStream(path,options);
//options:{highWaterMark:11}读取数据流中最大读取量为11个字节
- 设置二进制转化过程中的编码格式
readStream.setEncoding('utf-8');//读取流在读取过程中的编码格式
readStream.on('data',function(chunk){//数据存在时读取
console.log(chunk.toString());
});
- 判断二进制流是否支持指定的编码格式
Buffer.isEncoding('win1251');
- 整体代码
//Buffer中一个元素代表一个字节
//是一个二进制缓冲区(文件操作的时候有用)Buffer
//1.新建Buffer对象
let buf=new Buffer.alloc(100);//最大100个字节,一个汉字三个字节,一个英文一个字节
//2.将数据写入到缓冲区
let result=buf.write('你好');
console.log(buf);//返回字节长度
//3.二进制数据转化为字符串
let fs=require('fs');
//异步读取
let readStream = fs.createReadStream('./content.txt',{highWaterMark:11});
//设置二进制数据转化过程中的编码格式
readStream.setEncoding('utf-8');//读取流在读取时按照中文读取
readStream.on('data',function(chunk){
console.log(chunk.toString());
});//由数据触发执行事件
let buf1 = new Buffer.alloc(300);
//4.判断二进制流是否支持指定的编码格式
console.log(Buffer.isEncoding('utf-8'));
let conv=require('iconv-lite/lib/index');
let len = buf1.write('nihao','utf-8');
console.log('---------------------------------');
//encode编码decode解码
buf1 = conv.encode(buf1,'gb2312');
buf1=conv.decode(buf1,'utf-8');
console.log(buf1.toString());
七.单词
- require:需求
- create:创建
- server:服务器
- createServer:创建服务器
- request:请求对象
- response:响应对象
- listen:监听
- path:路径
- parse:解析
- dir:目录
- file:文件
- absolute: 绝对路径
- join:参加,结合
- base:基于
- format:格式
- hostname:主机名字
- protocol:协议
- search:搜索
- patnname:路径名字
- chunk:大块
- alloc:分配
- unsafe:不安全的
- buffer:缓冲区