什么是Node.js?
-
Node.js 是一个基于Chrome V8 引擎的JavaScript运行环境
-
Node.js使用了一个事件驱动、非阻塞式I/O的模型,使其轻量又高效
- Node.js功能
- 事件驱动
- 非阻塞I/O模型【 异步的输入输出,比如: 文件操作、数据库操作 等
- Node.js功能
Node.js版本
-
偶数版本为稳定版 (0.6.x ,0.8.x ,0.10.x)
-
奇数版本为非稳定版(0.7.x ,0.9.x ,0.11.x)
-
LTS(Long Term Support)
-
-
LTS是正式版本
-
Current是测试版本
-
Node.js的模块化问题
-
Node.js采用了Common.js模块化
-
应用
- 内置模块 -> 可以直接使用
- 第三方模块 -> Node.js没有的 类似于插件
- 自定义模块
-
模块化解决的是什么问题?
- js中可以引用其他类型文件
Node的安装
- 安装包安装
- 官网下载对应的安装包
- 一路next
- nvm安装(有一个类似的工具:n)
- Node Version Manager(Node版本管理工具)
- 由于以后的开发工作可能会在多个Node版本中测试,而且Node的版本也比较多,所以需要这么款工具来管理
- npm i require -D
Windows下常用的命令行操作
- 切换当前目录(change directory):cd
- 创建目录(make directory):mkdir
- 查看当前目录列表(directory):dir
- 别名:ls(list)
- 清空当前控制台:cls
- 别名:clear
- 删除文件:del
- 别名:rm -rf 文件目录名称
注意:所有别名必须在新版本的 PowerShell (linux系统)中使用
常见问题
- Node中有些第三方的包是以C/C++源码的方式发布的,需要安装后编译
- 环境变量丢失
- 部分电脑安装完毕之后没有环境变量需要手动配置
- Windows中环境变量分为系统变量和用户变量
- 环境变量的变量名是不区分大小写的
- PATH 变量:只要添加到 PATH 变量中的路径,都可以在任何目录下
- 目的可以在任何地方调起node命令
内置模块
-
fs
-
fs.mkdir:创建文件夹
创建名为data的文件夹
fs.mkdir('data',(err)=>{ if(err){ console.log('创建失败了'); }else{ console.log('创建成功了'); } });
-
-
http
- http.createServer:创建一个能够处理和响应 http 响应的服务
http.createServer((req,res)=>{ res.writeHead(200,{ 'Content-type':'text/html;charset=utf-8' }); res.write('<a href="#">baidu</a>');//服务器输出对应的信息 res.write('<strong>baidu</strong>');//服务器输出对应的信息 res.end('中文');//响应结束,输出括号里面的内容 }).listen('8000','10.31.161.200');8000->端口 10.31.161.200->IP地址 -
url:用于URL解析
- search:网址的“?”部分,包括开头的问号。
- hash:网址的“#”部分,包括#号。
- query:查询“?”后面的字符串并解析字符串形成对象
- url.parse():将一个URL字符串转换成对象并返回
const newObj = qs.parse(url.parse( str ).query,'&','=') -
querystring:处理url查找字符串
-
- querystring.parse string -> object
-
- querystring.stringify object -> string
-
- querystring.escape 中文转码
-
- querystring.unescape 中文解码
附:深拷贝
JSON.parse(JSON.stringify( state ))
-
-
event
-
1.archetype.on(事件名称,事件处理函数) ====>发布
-
2.archetype.emit(事件名称,实参) =====>订阅
archetype.on('handler',( val ) => { console.log('事件触发了', val ) }) archetype.emit( 'handler',100 ) -
第三方模块
-
request :简化的http请求,默认get请求,支持https
var request = require('request');
request('http://www.google.com', function (error, response, body) {
console.log('error:', error); // 错误信息
console.log('statusCode:', response && response.statusCode); // 响应
console.log('body:', body); // 数据
});
-
readline:
const rl = readline.createInterface({ // 创建了一个可以输入输出的接口
input: process.stdin,
output: process.stdout
});
rl.question('请输入您想说的话:', (answer) => {
if ( answer == '88' ) {
rl.close()
} else {}
});
-
http-errors :用来记录错误信息
-
express :express的顶级库,提供了很多expres api
-
cookie-parser :处理cookie
-
morgan :记录日志信息
-
path:找到文件对应的磁盘位置(绝对路径)
自定义模块
自定义模块上传实现步骤
-
创建文件夹,注意命名不要冲突
-
创建package.json文件
- npm init / npm init -y
-
创建了 index.js, 里面封装任意一个功能
-
创建一个 npm.js 账号
-
保证我们当前的源是 npm 源
- nrm use npm
-
登录账号
- npm adduser
-
上传
- npm publish