Node.js
1.http爬虫:
数据请求
get
request
post
案例: 后端爬虫
名词解释:
爬虫: 爬去数据
流程:
后端数据请求 —》 数据分析 —》数据清洗 ----》 数据前台发送
爬虫: 并不是所有网站都能爬取的
反爬虫
options 就是一个对象,也是一个配置
2.http web服务器渲染数据发送前端:
服务器:可以运行在服务端的一个网站
种类:1.web服务器(静态服务器)可以运行在浏览器中的服务器
2.api服务器(后端接口)后端语言暴露一个数据接口用于前端数据请求(ajax fetch)
Node.js中原生创建web服务器:
1,引入http模块:
const http=require(‘http’)
2.创建服务器:
http.createServer(callback)
callback中接收三个参数:request response next
3.监听服务器:
listen(port,host,callback)
port:端口
host:域名
3.解决中文乱码
1.设置请求头:
response.writeHead(200,{
‘Content-type’:‘text/html;charset=utf8’
})
2.发送一个meta标签:
response.write(’’)
3.toString() 对二进制有效
名词含义:
1.chunk:分片
2.keep-alive:缓存
给前台发送了一个html,这种渲染数据的形式称之为:后端渲染;服务端渲染;ssr
4.前端模块化
1. 问题:为什么前端要使用模块化?
模块化是具有特定功能的一个对象
模块化定义的流程:
1.定义模块
2.导出模块
3.引用模块
好处:1.可以存储多个独立的功能块
2.复用性高
2.种类
- AMD( require.js)
- CMD ( sea.js )
- Common.js
AMD定义一个模块:
AMD:异步的模块定义,提供定义模块以及异步加载模块的机制
提前执行,提前异步进行加载
优点: 依赖如果出现错误可以尽早发现
缺点: 容易产生浪费
define:用来定义模块
/*目录
a.js
b.js
*/
//AMD定义 a.js
define({
a:1,
b:2,
add:function(){}
})
//AMD引用
require([./a.js],function(moduleA){
moduleA指的是定义来的对象
})
//require.JS是一个AMD?框架可以异步加载JS文件,依赖前置、异步定义的AMD框架
//第一个参数是一个**数组**,里面定义一些需要依赖的包
//第二个参数是一个回调函数,通过变量来引用模块里面的方法;
CMD定义模块:**
CMD:通用模块定义,模块加载是按需加载
延迟执行,延迟按需加载
优点: 减少资源浪费
缺点:等待时间长,出错时间延后
define
//CMD
/*
目录结构
b.js
index.js
*/
// 模块定义 b.js
define(function(require, exports, module) {
// 模块代码
});
//模块引用 index.js
require('./b.js',function( moduleB ){
//moduleB就是b模块中导出的内容
})
Common.js
Node.js使用了Common.js的规范
易错的理解:
common.js是属于node的 ×
node属于common.js ×
//common.js
/*
目录结构:
name.js
index.js
*/
//模块的定义 name.js
const nameObj = {
name: 'lisa '
}
//模块的导出 name.js
module.exports = nameObj
//模块的引用
const nameObj = require('./name.js')
Node.js中Common.js规范的使用三种类型:
1.内置模块(内置模块指的是挂载在Node.js全局对象上的API):自己有的属性,通过点使用的是内置模块
2.自定义模块
1.模块的定义:
//举例
const student = {
id: 1,
name: 'Gabriel Yan'
}
const fn = function(){}
2.模块的导出:
// 第一种导出
module.exports = student // 安全性不高 默认导出一个
//第二种导出
module.exports = { //批量导出,按需引用
student,fn
}
3.模块的·引用:
// 这种引用对应第一种导出
const student = require('./xxx.js')
// 这种引用对应第二种导出
const { student , fn } = require( './xxx.js ' )
3.第三方模块:因为自己处理了了内置所以省略了./nodemoduls
1. 别人已经封装好的模块
2. 这个模块具备一些特定的功能
3. 这些模块存放在 www.npmjs.com 这个网站中
这些模块的文档也记录在内
格式: var/let/const 变量名 = require( 模块名称 )
总结:
第一步,使用npm/cnpm 安装
第二部,在文件中引入
第三部,在www.npmjs.com这个网站中找到这个模块的文档,根据文档来使用
-D===–save-dev
//举例
cnpm i jquery -D===cnpm i jquery --save-dev
自定义模块变成第三方模块
1.创建package.json文件 $ npm init -y
2.注册( http://www.npmjs.com )账号
3.自定义模块的上传到( http://www.npmjs.com )
4.检查源是不是npm $ nrm ls
5.如果不是要切换源 $ nrm use npm
6.命令行登录npm.js仓库 $ npm adduser
7.创建模块并导出模块
8.查看自定义的包名是否已经被使用以免报错
9.发布自己的包 $ npm publish
Node.js跨域
跨域:
· 前端的跨域 jsonp 和 反向代理(创建一个虚拟后端服务器,让这个后端服务器帮助我们请求数据)
后端跨域 node php java
1.设置请求头
2. 使用第三方的中间件( cors )
中间件: 就是具有一定功能的一个函数