NODE - 基础知识及环境配置
回顾一下 - 访问网址过程:
1.在浏览器地址栏中输入网址。 2.浏览器通过用户在地址栏中输入的URL构建HTTP请求报文。 3.浏览器发起DNS解析请求,将域名转换为IP地址。 4.浏览器将请求报文发送给服务器。 5.服务器接收请求报文,并解析。 6.服务器处理用户请求,并将处理结果封装成HTTP响应报文。 7.服务器将HTTP响应报文发送给浏览器。 8.浏览器接收服务器响应的HTTP报文,并解析。 9.浏览器解析HTML页面并展示,在解析HTML页面时遇到新的资源需要再次发起请求。 10.最终浏览器展示出了页面。
什么是WEB开发:
//WEB开发的过程 请求 - 客户端发起请求 处理 - 服务器处理请求 响应 - 服务器将处理结果发送给客户端 形象点儿:单机应用就是,自己的事情自己做;WEB应用就是,干什么都找妈妈。 //C/S和B/S的区别 C/S(Client/Server)与B/S(Browser/server): C/S:客户端/服务器,有独立客户端。 B/S:浏览器/服务器,没有独立客户端,通过浏览器来访问。 优缺点对比:B/S的部署和维护都比较方便,但是可能不够流畅。C/S的部署和维护不够方便,但是可能更加流畅。
Node.js的概况:
//Node.js是一个开发平台 开发平台:有对应的编程语言、有语言运行时、有能实现特定功能的API(已经封装好的、可以直接调用的功能)。 Node.js平台对应的编程语言:JavaScript。 //Node.js平台可以做什么 Node.js平台是基于Chrome V8 JS引擎构建的,基于Node.js可以开发控制台程序(命令行程序、CLI程序)、桌面应用程序(GUI、需要借助node-webkit\electron等框架实现)、Web应用程序。 PHP开发技术栈 - LAMP:Linux、Apache、MySQL、PHP Node.js开发技术栈 - MEAN:MongoDB、Express、Angular、Node.js //Node.js有哪些特点 事件驱动:当事件被触发时,执行传递过去的回调函数。 非阻塞I/O模型:当执行I/O操作时,不会阻塞线程。I/O是“输入/输出”的意思,可以是文件读写或者网络读写。 单线程 拥有世界最大的开源库生态系统:npm,内置的API是有限的,但是基本上我们能想到的功能都有人写好了,放在npm这个代码仓库上,都能拿来直接用,就类似于jquery的一大堆插件。
Node.js与PHP等传统模式的区别:
卸载全局安装的 node/npm:
//傻瓜式安装法 在官网上下载的node安装包,运行后会自动安装在全局目录。 //命令式卸载法 如果已经安装了node,可能会对nvm版本控制产生影响,所以先卸载掉原来的安装 打开Finder,按shift+command+g,分别输入并删除下列文件和文件夹: 如果使用了 brew install node 安装NodeJS,要在终端中执行 brew uninstall node 命令来卸载 打开 /usr/local/lib,删除 node 和 node_modules 相关的文件和文件夹 打开 /usr/local/include,删除 node 和 node_modules 相关的文件和文件夹 检查个人主文件夹下所有 local、lib 以及 include ,删除所有 node 和 node_modules 相关文件及文件夹 打开 /usr/local/bin 并删除 node 可执行文件
//额外指令,确保删除的更彻底 sudo rm /usr/local/bin/npm sudo rm /usr/local/share/man/man1/node.1 sudo rm /usr/local/lib/dtrace/node.d sudo rm -rf ~/.npm sudo rm -rf ~/.node-gyp sudo rm /opt/local/bin/node sudo rm /opt/local/include/node sudo rm -rf /opt/local/lib/node_modules
//由此可以记住一个Linux命令 rm 文件路径 删除该文件 rm -rf 文件路径 删除该文件路径下的所有文件 rm -rf ~/ ~/可以视作模糊查询
安装nvm实现node的版本管理:
//安装nvm(OS X中) 如果已经安装了X-Code,可以直接运行X-Code命令: xcode-select --install 如果没有安装X-Code,也可以在终端汇总用下面的命令:(我用的这种,成功啦) curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash //通过nvm安装多个版本的node,并进行版本切换 为什么要用nvm进行版本管理: 在mac中,npm安装的模块路径均为 /usr/local/lib/node_modules 当使用n命令(TJ大神发明的node版本切换命令)切换版本时,实际上回共用全局 node/npm 目录 因此不能很好的满足,按照不同node版本使用不同全局 node 模块的需求,所以乖乖用nvm吧 帮助命令: nvm --help 显示帮助 列出可用的node版本: nvm ls 列出本地已经安装的可用node版本 nvm ls-remote 列出远端可以使用的node版本(这个命令贼慢) 安装和卸载: nvm install <版本号> 安装某个版本的node,例如:nvm install v9.11.0 nvm uninstall <版本号> 卸载某个版本的no 临时切换版本: nvm use <版本号> 临时切换版本,只在当前终端有效,新开终端无效 永久切换版本: nvm alias default <版本号> 永久切换版本,新开的shell中生效,已经打开的shell不生效 nvm alias default node 不写版本号,默认使用最新安装的版本 使用特定版本node,执行特定命令: nvm run <版本号> <js文件名>.js nvm exec <版本号> node <js文件名> .js nvm exec <版本号> <正常node命令> nvm exec <版本号> npm run <npm命令名> 其中,run就相当于exec node,剩下的就好理解了
配置环境变量:
用上面的方法,可以成功的在全局环境下安装Node.js,按理说是不需要配置环境变量的,但还是说一下。
配置环境变量的意义:
假设我们在C:/根目录下安装了Node.js,此时命令行环境停留在D:/根目录,我们想要启动C:/根目录下的Node.js。
将Node.js命令的环境变量配置为C:/根目录,这样在执行命令行时就会首先在D:/根目录寻找,找不到后就会去环境变量配置的地址寻找。
在REPL中上路:
//什么是REPL 全称:Read-Eval-Print-Loop(交互式解释器) R - 读取:读取用户输入,解析输入的JS数据结构并存储在内存中。 E - 执行:执行输入的数据结构。 P - 打印:输出结果。 L - 循环:循环操作以上步骤,直到用户两次按下ctrl-c按钮退出。 //启动和退出 如何进入: 在REPL中编写程序,类似于浏览器开发人员工具中的控制台空能。 直接在控制台输入 node命令,就可以进入 REPL环境。 如何退出: 按住 control键 不要放开,然后按两下 c键。 注意:REPL这个执行环境对ES6支持的很好,可以直接进入REPL编写代码对ES6的特性进行测试。
第一个例子:
目的:了解怎样编写和执行Node.js程序 案例:做加法 //test.js var m = 100; var n = 10; function add(x,y){ return x+y; } var result = add(m,n); console.log("运行结果是:"+result); //执行 假设test.js在/Users/yananli/Downloads目录 进入文件所在目录:cd /Users/yananli/Downloads 用node命令直接执行:node test.js 结果:控制台输出了 “运行结果是110”
API阅读小技巧:
//模块间的区别 process模块 在使用的时候无需通过 require() 加载,fs模块 在使用的时候必须通过 require() 加载,var fs = require("fs");。 这是因为,process模块 是全局模块,可以直接使用,fs模块 不是全局模块,必须加载才能使用。 可以在API中的 Globals目录,查询有哪些是全局模块。 //API级别 Stability - 0:(红色)表示已经废弃,不建议继续使用 Stability - 1:(橙色)表示正在试验,以后可能更新 Stability - 2:(绿色)表示稳定,建议使用
MySql的安装和配置(扫雷游戏🙄):
//第一个坑:版本问题 目前官网给出的版本,只支持 Mac OSX 10.14的系统。 不想升级系统,又想安装MySQL的话,就问别人拿安装包吧。 亲测:安装错误的版本会启动不了🙃。 //第二个坑:临时密码过期 解决方案:修改密码 命令:/usr/local/mysql-5.7.12-osx10.11-x86_64/bin/mysql -uroot -p Enter password:输入已经过期的那个临时密码就行,然后回车 进入 mysql monitor 命令:alert user 'root'@'localhost' identified by 'root'; 顺利将密码改成 root