1、stream流:
- node.js中数据是分片(chunk)传输的
- 为了提高性能,较少cpu能耗,创建了管道流pipe。它是连接I/O之间的一个管道。
- gulp就是依赖了node.js中流的概念,才在与grunt的竞争中胜出。
- 示例代码(业务:将当前父级目录下的a.txt打包,生成一个压缩文件)
const zlib = require("zlib");//zlib是压缩包的内置模块(插件) const fs require("fs"); const inp= fs.createReadStream("../a.txt");//创建可读流 const out = fs.createWriteStream("a.txt");//创建可写流 const gzip = zlib.createGzip();//创建空压缩包 inp.pipe(gzip).pipe(out)//通过fs文件系统将data写入
2、console模块
- 底层调用的是process.stdout
3、http爬虫
- 概念:通过后端语言爬取网页中的数据,然后通过特点模块清洗数据,最后输出给前端。
- 怎么做到数据清洗?
第三方插件cheerio(不支持es) - 怎么实现反爬虫?
在能用text()获取到的内容里面放一张图片,别人就无法用text()来获取了 - 常见http状态码1xx-5xx:
- 200响应正常
- 304未修改
- 400无法找到请求的资源
- 403没有访问权限
- 404访问的资源不存在
- 500服务器内部错误
4、后端服务器
- web服务器(静态服务器)
- 比如:wamp里面的www目录,可以展示页面内容
- 前端用nginx
- 应用级服务器(api服务器)
- 后端接口
- tomcat
4、node.js的模块化
-
为什么要使用模块化?
- html中引入多个js文件,使用script标签对
- node.js都是js文件,那么js文件如何引入其他类型文件?—>模块化
-
模块化优点:复用性高,一次定义,多次使用
-
前端模块化
- AMD
实现需要使用require.js - CMD
实现需要使用sea.js(已经不更新) - Common.js
node.js使用了common.js规范
common.js 属于node.js? No No No- 内置模块
- 格式:
var/let/const 变量名 = require(路径)
- 内置模块的路径就是模块名
- 例如:
const fs = require( 'fs' ); fs.readFile('../dist/1.txt','utf8',( error,docs ) => { console.log( docs ); })
- 格式:
- 自定义模块
- 创建模块(可以是任意模块,如function、object、string)
- 导出模块
module.exports = 模块名 // 导出一个
module.exports = {} //导出多个
- 导入模块
var/let/const 变量名 = require(相对路径) // 导入一个
var/let/const {变量名} = require(相对路径) //导入多个
- 例如:
//const name = "zhangsan" const name = { firstName: 'zhang', lastName: 'san' } // module.exports = name module.exports = { name }
- 第三方模块
- cheerio 用来做数据清洗
- request 用来做数据请求
- 更多第三方模块可在npmjs.com上搜索用法:
- 安装
$ npm/cnpm i 模块名 --dev-save/-D
开发环境安装
$ npm/cnpm i 模块名 --save/-S
生产环境安装 - 导入
let/var/const 变量名 = require(模块名)
- 例如:
const request = require( 'request' ); request('https://m.lagou.com/listmore.json',( error,response,body ) => { //error 错误信息 response 响应结果 body 获取的数据 console.log( body ); })
- 内置模块
- ecmascript
- es5: module.export/exports
- es6: export default/export
- AMD
-
总结
1、AMD和CMD都是通过关键字define来定义模块化的,通过require来引入模块
2、es6模块化(前端里程碑)
- export default 默认导出一个,import xx from xx
- export 批量导出多个,import {xxx} from xxx
5、npm包上传至 npmjs.com
<1> 创建一个自定义模块(文件夹名一定是唯一的,自行去npmjs.com查看文件名是否存在)
<2>创建package.json文件
<3>将npm源切换到npmjs上(通过nrm切换)
- nrm安装:
cnpm i nrm -g
- 查看当前所有源:
nrm ls
- 切换到npm源:
nrm use npm
<4>注册npmjs.com账号
<5>激活账号(注意:注册后的激活弹窗只出现一次)
<6>在当前目录下登录npm账号
$ npm adduser
<7>填写用户名、密码、激活邮箱
<8>发布自定义模块
- $ npm publish
6、前端环境
- 开发环境
无法直接在服务器中运行 - 生产环境
将开发环境下的代码经过打包、压缩、编译之后的文件 - 测试环境
测试代码运行情况,如代码质量、代码风格 - 预上线环境
beta版本(内测版)
放到一个局域网中,由专业人员来测试 - 上线环境
放在云服务器或服务器主机中的项目,可以供任何用浏览器和任何人使用
7、process.evn
- process.env属性返回一个包含用户环境信息的对象
process是进程管理模块
evn是所有的进程中的环境变量 - 可用来在js文件中获取package.json中的字段
eg:console.log( process.env.npm_package_name );