node.js是一个基于Chrome-v8设计的单线程的基于事件驱动的非阻塞I/O模型的一个js运行环境
单线程
node.js的主线程是程序员写的线程,这个线程的代码是v8在运行,它提供的异步函数是底层c/c++在开启线程执行任务
非阻塞I/O模型
I/O 耗时操作,非阻塞I/O能让计算机的多核发挥功能,同时执行任务
基于事件驱动–回调函数
把任务添加到事件池(event-loop),让异步任务去子线程中执行 ,然后注册一个事件 ,任务执行完毕以后,就回到主线程执行回调函数
模块化
把功能按照模块来封装,方便扩展,维护管理 ,也更有利于开发大型项目
npm 社区是nodejs的模块化社区并且它是全世界最大的模块市场 ,2018被微软收购
单线程,虽然是单线程,但它提供的异步函数是底层c/c++在开启线程执行任务,所以又可以非阻塞
node是一个开源的免费的环境,性能好速度快,资源占用小,但它不是很安全
就是将一系列类似的功能全部封装到一个块中,方便我们使用,就叫模块化
在nodejs中使用require()来引入模块
这就是一个自带的核心模块
var http = require("http");
这就是一个第三方的模块
var mime = require("mime");
引入自定义模块一般括号里是写的模块所在的相对文件路径
这就是一个自定义模块
var mymodule=require("./mymodule.js")
mymodule.js 就是自己封装的一个模块
先去当前项目中的node_modules文件夹中找fs1文件夹中的package.json中main字段对应的路径,找到了就引入
没有就去node的安装包中的全局安装路径中找,找到就引入
还没有就去核心库找,找到就引入
如果核心库都还没有,那么就会报错( Cannot find xxx)
一般的的没有找到模块的报错都是因为没有安装第三方的模块
那么第三方模块怎么下载呢?
在dos窗口中下载,xxx 代表你要下载的模块名
npm i xxx
i 和 install 是一样的,i 是简写
-g 表示下载到全局安装路径中
npm i xxx -g
–save 表示模块下载到项目安装路径
npm i xxx 或者 npm i xxx --save 是一样的
下载了第三方模块后 npm会在项目配置文件中的依赖项中写入下载的第三方模块名和版本
这些是都可以下载的,以后下载的模块多了后文件就会很大,那么当需要把文件传输给别人的时候就可以只传输其他文件和npm的配置文件
别人接收后运行前自己下载npm模块就好,模块太多一个一个下载就很麻烦那么就可以直接** npm i **就可以了,它就可以根据npm的配置文件进行下载需要的模块了,非常方便
Ajax 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术
Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术
Ajax = 异步 JavaScript 和 XML 或者是 HTML(标准通用标记语言的子集)。Ajax 是一种用于创建快速动态网页的技术
使用 JavaScript 向服务器提出请求并处理响应而不阻塞用户核心对象XMLHttpRequest。通过这个对象,JavaScript 可在不重载页面的情况与 Web 服务器交换数据,即在不需要刷新页面的情况下,就可以产生局部刷新的效果
传统的网页(不使用 Ajax)如果需要更新内容,就必须重载整个网页页面,这样就会造成资源浪费,因为只有一部分是需要更新的,而其余的不用更新的又要重新加载一遍,就很耗时耗资源
Ajax 主要是实现页面和 web 服务器之间数据的异步传输,用在开发网站上
它有一个明显的特点就是局部刷新,也就是说当执行网页中的一小部分的代码时,不用将整个网页提交上去的,只需要提交你改动的网页的局部信息就行
它的最大优点就是能在不更新整个页面的前提下维护数据
这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变的信息
Ajax可使因特网应用程序更小、更快,更友好
Ajax 是一种独立于 Web 服务器软件的浏览器技术
一共五个步骤
<button onclick="load1()">ajax请数据</button>
<script>
function load1(){
//1.创建ajax对象,new后面一段是在做兼容设计
let xhr=new XMLHttpRequest()||new ActiveXObject("Micsoft.XMLHTTP")
//2.配置连接信息(http连接)
// 第三个参数值为布尔类型,用于指定是否用异步方式。true表异步,false表同步,默认为true。
xhr.open("GET",`http://192.168.6.60:8080/ajax1?name=karen&count=20`,true)
//3.发送网络请求
xhr.send()
//4.等待
xhr.readyState == 4
// 设置回调函数,在回调函数中对不同的响应状态进行处理
xhr.onreadystatechange=function(){
// 4就表示网络连接响应成功,而status的数值是表示业务数据的成功或失败
if(xhr.readyState==4&&xhr.status==200){
console.log(xhr.responseText)
}else if(xhr.readyState==4&&xhr.status==404){
console.log(xhr.responseText)
}
}
}
</script>
MVC:是一种设计思想
M:modul(数据模型) 数据模型层
V:view(视图) 视图层
C:Controller 逻辑控制层
MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面,C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新
优点
require 和 import 分别是不同模块化规范下引入模块的语句
他们的出现的时间、地点不同,不同端(客户端/服务器)的使用也是有限制的
require/exports 是运行时动态加载,import/export 是静态编译
他们的用法也不一致
require/exports 的用法
const fs = require('fs')
exports.fs = fs
module.exports = fs
exports 是对 module.exports 的引用,相当于
exports = module.exports = {};
并且import/export 只能在模块顶层使用,不能在函数、判断语句等代码块之中引用,但是require/exports 可以
它们的严格模式也不同:CommonJs模块和ES6模块的区别:
CommonJs模块默认采用非严格模式
ES6 的模块自动采用严格模式,不管你有没有在模块头部加上 “use strict”;
CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用