NodeJS一个基于chrome的V8引擎的JAVascript的运行环境。NodeJS使用了一个事件驱动以及非阻塞式的I/O式模型
NodeJS的NPM是全球最大的包管理网站
V8引擎:
内核, 脚本引擎 , 渲染引擎
I/O: input output
什么是npm?
1、包管理器
2、是一个命令
3、是一个网站
npm常用的命令
npm install :安装pack.json中的依赖
npm install <包名> --save 生产环境中的依赖
npm install <包名> --save-dev 开发环境中的依赖
npm install <包名> -g 全局安装(能不用就不用)
npm uninstall <包名> 删除
npm update <包名> 升级
npm cache clean 清除缓存
yarn包管理网站(推荐)
cnpm install yarn -g 安装
yarn init ==npm init
yarn add <包名> 等价于 npm install <包名> -S 生产环境中的依赖
yarn add <包名> -dev 等价于 npm install <包名> -D 开发环境中的依赖
yarn add 包名 -g 全局安装
yarn upgrade [package]
yarn remove [package]
yarn install
安装的过程是异步的,会有缓存,下次安装的时候会缓存中进行安装。
1、原生JS运行js文件的时候需要依赖于浏览器
2、nodeJS运行文件的时候服务 终端
3、原生JS的东西会有兼容性。Node中不会有兼容性
4、本地文件读写 服务器创建 连接数据库(原生JS无法做到的) nodeJS都可以做到
(原生JS中有BOM,DOM,但是NodeJS是在服务端的JS环境因此是没有BOM,DOM的概念(跨域的概念也没有))
(NodeJS中也有原生JS中没有的属性,process, global,)
(NodeJS可以调用底层的API 文件的读写,服务器的创建,环境变量的配置,连接数据库,操作数据库。。。)
如何进入Nod的交互模式
node回车。
退出:ctrl+c 2次 || ctrl+d
文件的读写 服务器的创建 连接数据库等等....
优点:做项目中做中间层的使用,高并发。()
缺点:不适合大量的计算
requrieJS modules seaJS(不常用) commonJS
AMD规范 modules CMD规范 commonJS
AMD规范:依赖前置
CMD规范:依赖就近
规范:
一个模块的导入和导出
modulre: import export default export
commonJS: require module.exports
nodeJS中的模块分为哪几个部分?
1,内置模块 :http
2,第三方模块 : 需要通过npm 进行下载的
3,自定义模块 :自己编写的模块
路由:根据用户请求的路径返回不同的页面或者数据
前端路由:前端路由主要应用在单页面开发,前端路由用户请求的路径发生改变的时候不会经过后端的,
主要的原理是通过onhashchange 或者是history.js进行页面的切换。前端路由主要是用来做数据渲染
后端路由:根据用户请求的路径返回不同的页面或者数据
5-1:supervisor
步骤:
1. cnpm install supervisor -g
2.json:scripts: dev:“supervisor server”
3.npm run dev
res:response 响应
常用的属性
res.write 响应 多次
res.end 结束的响应 (一次 )
res.writeHead() 设置响应头与状态码 (下面2个的综合写法)
res.statusCode 设置状态码 (404也是设置的)
res.setHeader() 设置响应头(“content-type” 类型)
req:request 请求
常用的属性
req.url 请求地址
req.method 请求方式(默认是get)
req.headers 请求头
常见的请求头中的类型
1、application/json
2、application/x-www-form-urlencode 数据序列化
key=val&key=val
ajax({
type:
data:
url:
headers:{
content-type:""
},
success:
})
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190819174914833.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d3NjE2,size_16,color_FFFFFF,t_70)
响应头中content-type常用的类型有哪些?
1、文本类型 text/plain
2、html类型 text/html
3、css类型 text/css
4、js类型 application/x-javascript
5、json类型 application/json
6、图片类型 image/png image/jpg …
面试题:
1、传统的DOM渲染方式?
纯后端渲染
纯前端渲染
服务端和js渲染结合前端渲染
2、什么是模块化?模块化的好处
模块化是一种将系统分离成独立功能部分的方法,可将系统分割成独立的功能部分,严格定义模块接口、模块间具有透明性。
( 1.灵活架构,焦点分离
2.方便模块间组合、分解
3.方便单个模块功能调试、升级
4.多人协作互不干扰)
企业项目中为什么要使用NodeJS ?
AMD&&CMD之间的区别:
AMD依赖前置; CMD依赖就近
浏览器渲染页面的流程:
1, 浏览器会将HTML解析成一个DOM树,DOM 树的构建过程是一(更具体的解析HTML过程看上一篇博客:点击打开链接)
2,将CSS解析成 CSS Rule Tree(css规则树) 。
3,解析完成后,浏览器引擎会根据DOM树和CSS规则树来构造 Render Tree。注意:Render Tree 渲染树并不等同于 DOM 树,因为一些像Header或display:none的东西就没必要放在渲染树中了。
4,渲染。有了Render Tree,浏览器已经能知道网页中有哪些节点、各个节点的CSS定义以及他们的从属关系。下一步进行layout,进入布局处理阶段,即计算出每个节点在屏幕中的位置。,
5,再下一步就是绘制,即遍历RenderTree,并使用用户界面后端层绘制每个节点。根据计算好的信息绘制整个页面。
3、application/x-www-form-urlencode
form的enctype属性为编码方式:用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x-www-form-urlencoded。 当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2…),然后把这个字串append到url后面,用?分割,加载这个新的url。 当action为post时候,浏览器把form数据封装到http body中,然后发送到server。 如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了。 但是如果有type=file的话,就要用到multipart/form-data了。浏览器会把整个表单以控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件name)等信息,并加上分割符(boundary).
窗体数据被编码为名称/值对。这是标准的编码格式。
4、关于报文 相关文档读 3篇
5、当输入www.baidu.com的时候按下回车会发生什么事情?
当输入www.baidu.com时
DNS解析
找到相应的服务器
TCP的三次握手
找到相应的资源库
返回相对应的页面及进行页面的解析-{css,js,html,img,}
解析完成后客户端
Node路由:
1、要求引入一个js文件 弹出1
2、引入一个css文件
3、引入10张图片
4、引入写一个选项卡
node模块:
1,fs.readFile:读取文件 参数1:文件路径,参数2:是成功的回调, 回调中参数1:err,参数2:读取到的数据
fs.readFileSync(路径) 返回值是读取到的数据
写文件:
2,fs.writeFile(“文件名”,‘书写的内容’,(err)=>{
})
参数1:文件路径
参数2:书写的内容
参数3:成功的回调
解析url转换成功urlObject
parse参数:
1、需要转换的字符串
2、分隔符
3、赋值符
stringify参数:
1、需要转换的对象
2、分隔符
3、赋值符
//引入核心模块
const EventEmit = require(“events”);
//创建一个类 继承核心模块方法
class MyEmitter extends EventEmit {}
//实例化
const myEvent = new MyEmitter();
addListener 事件绑定
事件的触发emit
on("事件名称",事件函数)
off("事件名称",事件函数)
emit('事件名称')
const http = require(“http”);
let url = “http://www.mobiletrain.org/?pinzhuanbdtg=biaoti”;
node服务器与服务器之间进行数据请求的时候数据时一块一块接受的,不像浏览器一下子全部接受。,
//服务端发起了一个get请求
http.get(url,(res)=>{
let str = “”;
res.on(“data”,(data)=>{
str+=data;
})
res.on("end",()=>{
console.log(str);
})
})
GET,POST请求
标签
<%-%> :输出标签(HTML会被浏览器解析)
<%#%> :代码注释
公共样式:
引入<%- include …/public/name%>
public文件名name:公共样式的名字