一、今日学习内容:
- 服务器
- 服务器可以从硬件、软(系统软件、应用软件)两个角度描述
- 按硬件描述:
- 服务器就是一台超级计算机(超强CPU、内存、硬盘等)
- 按系统划分:
- 在硬件上安装了什么操作系统,就可以称为该系统的服务器
- eg:Linux服务器、windows服务器、Unix服务器
- 按软件划分:
- 在操作系统中安装了什么软件,就可以称为该软件的服务器
- eg:Apache服务器、数据库服务器、邮件服务器等
- web服务器
- web服务器就是安装了web服务软件,能够提供网站服务的服务器。(淘宝、京东、新浪)
- 常见web软件:
- Apache、Nginx、IIS、Tomcat、Node.js
- Apache服务器、Nginx服务器、IIS服务器、Tomcat服务器、Node.js服务器
- PS:web服务器又叫做http/https服务器
- Node.js
- 概念
- Node.js是一个基于Chrome V8引擎的 ECMAScript运行环境
- Chrome浏览器的内核是Blink,js解析引擎V8
- V8可以嵌入到任何C++应用程序中,无论是Chrome还是Node.js,事实上都是嵌入了V8引擎来执行JavaScript代码
- Chrome浏览器中,还需要解析、渲染HTML、CSS等相关渲染引擎,另外还需要提供支持浏览器操作的API、浏览器自己的事件循环等
- Node.js提供了大量的工具(API),能够让我们完成文件读写、web服务器创建等功能
- API:application program interface 应用程序接口
- 中间层----libuv
- js代码经过V8引擎,在通过Node.js的Bindings,将任务放到Libuv的事件循环中
- Libuv提供了事件循环、文件系统读写、网络IO、线程池等等内容
- node.js特点
- 跨平台(window、Linux、Unix、Mac)
- Node.js和浏览器中js的区别
- 浏览器中的js组成:ES核心(ECMAScript核心)+DOM+BOM
- Node.js中的js组成:ES核心+全局成员(全局对象)+模块系统(系统模块、第三方模块、自定义模块)
- 全局成员:setTimeout、setInterval、console.log()
- 这几个名称和功能虽然跟浏览器中的一样,但是是nodejs自己实现的,与浏览器无关
- 模块:一个js文件,内部定义了很多属性和方法,在程序中引入该模块就能使用模块中定义的属性和方法
- 常用命令
- dir\Is:查看目录下所有文件和目录
- Linux系统中只能使用Is(类unix:unix、Linux、Mac、Android)
- Node.js系统模块
- 介绍:
- 系统模块:
- 随着Node.js一起安装,并由官方进行维护的模块
- 一个模块中包含了很多方法和属性,可以帮助我们实现不同的功能
- fs----文件系统模块(filesystem)
- 专门用来操作文件和目录的模块,能够进行文件创建/删除,读取文件,获取文件详情等操作
- 文件读取
- let/var /const fs=require('fs');
- fs.readFile('文件路径' , '字符集选择' ,(err,data)=> { } )
- 文件读取成功 err----null data----文件内容
- 文件读取失败 err----错误对象 data----undefined
- 文件写入
- fs.writeFile('文件路径' ,写入文件的字符串 [,字符集 ] ,(err)=> { } )
- 文件追加
- fs.appendFile('文件路径' ,写入文件的字符串 [,字符集 ] ,(err)=> { } )
- Node创建web服务器
- 请求-处理-响应
- 请求:
- 在浏览器的URL地址栏输入地址,按下回车之后,浏览器就会向对应的服务器发送请求。需要服务器的某个文件(最常见最直观的一种请求)
- 服务器接收到请求之后,找到对应的文件,并将文件中的内容读出
- HTTP模块介绍
- http是一个系统模块,让我们能够通过简单稍微流程穿件一个web服务器
- Apache是一个成品服务器,安装好之后就有了web服务器的所有功能,使用http模块创建服务器时,服务器能干什么取决于我们如何定义服务器的功能
- 使用HTTP模块搭建web服务器
- 创建web服务器步骤:
- 1)加载/导入/引入 http模块 const http =require(‘http’)
- 2)创建服务器对象 const server = http.createServer();
- 3)启动服务器,监听端口 server.listen(3000,( ) = >{ });
- 4)监听浏览器请求并进行处理和响应 server.on('request' ,(req.res) = > { res.end( ); } )
- 不同URL显示不同内容
- 核心:
- req(请求对象)中有URL属性,该属性中保存了当前请求的URL地址
- URL属性中保存的地址是没有协议、IP、端口号,并且以/开头的地址
- 用fs.readFile读取出文件内容,再用res.end响应给浏览器
- 解决中文乱码问题
- 核心:使用res(响应对象)中的setHeader方法
- res.setHeader('content-type','text/html;charset=utf-8');
- 静态资源加载(CSS、js、img等)
- req.url----得到的是没有协议、ip/域名、端口号的地址
|