为什么要学习node.js。
首先感谢b站的up我超怕的,就是跟着这位大佬学的。视频地址:https://www.bilibili.com/video/BV1Ns411N7HU?p=6&spm_id_from=pageDriver
对于我来说,最关键的原因是会的话面试会加分~
然后是学习成本低啦。都是用的javascript。最后谁还没有个做全栈的想法呢,前后端都会天下我有。当然我是node.js火才选择的。node火的原因大概有以下几点。
1、首先Node.js不会死锁,因为它根本不允许使用锁,它不会直接阻塞 I/O 调用。Node.js还宣称,运行它的服务器能支持数万个并发连接
2、采用事件驱动、异步编程,为网络服务而设计。其实Javascript的匿名函数和闭包特性非常适合事件驱动、异步编程。而且JavaScript也简单易学,很多前端设计人员可以很快上手做后端设计。
3、Node.js非阻塞模式的IO处理给Node.js带来在相对低系统资源耗用下的高性能与出众的负载能力,非常适合用作依赖其它IO资源的中间层服务。
4、Node.js轻量高效,可以认为是数据密集型分布式部署环境下的实时应用系统的完美解决方案。Node非常适合如下情况:在响应客户端之前,您预计可能有很高的流量,但所需的服务器端逻辑和处理不一定很多。
node是什么
node不是一门编程语言,也不是库或者框架,而是一个javascript的运行环境,可以让js脱离浏览器运行,当然在浏览器上js跑的还是最快的。
node的js和浏览器js的区别
- *没有BOM、DOM。*没有了浏览器的BOM、DOM操作。
- node提供了许多服务器相关的api,例如文件读写,网络服务的构建,网络通信,http等。
小知识:
- 世界上最大的开源库生态系统npm是用node.js开发的
- node的事件驱动和非阻塞I/O模型(异步)让它变得轻量且高效。//暂时没明白,以后补上解释。
- node是built on chrome’s V8 javascript engine node.js 是基于谷歌的V8js引擎开发的,目前V8引擎是执行速度最快的js引擎
- js引擎:专门处理js脚本的虚拟机。
node能干啥
- web服务器后台
- 命令行工具(前端人员接触很多) 如npm hexo(静态博客网站生成器)等等
推荐免费教材
- 官方api文档:https://nodejs.org/dist/latest/docs/api/
- 中文api文档:http://nodejs.cn/api/
- 中文社区:https://cnodejs.org/
安装Node环境
查看Node环境的版本号
下载:https://nodejs.org/en/
安装:
- 傻瓜式安装,一路next
- 安装过再次安装会升级 确认Node环境是否安装成功
- 查看node的版本号:node --version或者node -v
- 配置环境变量
---------------------------------------介绍完毕--------------------------------------
---------------------------------------开始实操--------------------------------------
文件操作
文件读取
浏览器中的JavaScript是没有文件操作能力的 //但是Node中的JavaScript具有文件操作能力
fs是file-system的简写,就是文件系统的意思 //在Node中如果想要进行文件的操作就必须引用fs这个核心模块
在fs这个核心模块中,就提供了所有文件操作相关的API 例如 fs.readFile就是用来读取文件的
// 1.使用fs核心模块
var fs = require('fs');
// 2.读取文件
```javascript
```javascript
```javascript
fs.readFile('./data/a.txt',function(err,data){
if(err){
console.log('文件读取失败');
}
else{
console.log(data.toString());
}
})//tips:注意err和data的位置,如果交换那就是err获得对象了。
//tips2:相对路径必须要带./
文件写入
// 1.使用fs核心模块
var fs = require('fs');
// 2.将数据写入文件
fs.writeFile('./data/a.txt','我是文件写入的信息',function(err,data){
if(err){
console.log('文件写入失败');
}
else{
console.log(data.toString());
}
})//tips:注意文件不能起名叫做node.js
HTTP
// 1.加载http核心模块
var http = require('http');
// 2.使用http.createServer()创建一个web服务器
var server = http.createServer();
// 3.服务器要做的事儿
// 提供服务:对数据服务
// 发请求
// 接收请求
// 处理请求
// 反馈(发送响应)
// 当客户端请求过来,就会自动触发服务器的request请求事件,然后执行第二个参数:回调处理函数
server.on('request',function(){
console.log('收到客户的请求了')
})
// 4.绑定端口号,启动服务
server.listen(3000,function(){
console.log('runing...')
})
node模块
Node中的模块系统
使用Node编写应用程序主要就是在使用:
EcmaScript语言(和浏览器一样)
在Node中没有Bom和Dom
核心模块
- 文件操作的fs
- http服务操作的http
- url路径操作模块
- path路径处理模块
- os操作系统信息
- 第三方模块 如art-template等,需要用npm下载,还有自己写的模块。
模块化理解
- 文件作用域(模块是独立的,在不同的文件使用必须要重新引用)【在node中没有全局作用域,它是文件模块作用域】
- 如在a.js中定义var foo=‘a’;在b.js中定义var foo=‘b’,即使a调用b,也不会让foo变成b
- 而且a和b也不能调用其他js没有exports出来的任何方法。
- 通信规则:加载require(可以简写,如
require(./b.js)
如require(./b)
但不能不写./) - 导出exports//
exports.add=function add(x,y){console.log(x+y);};
//exports.num=1;