147.Node.js学习笔记(一)2018.11.27

1. Node.js介绍

   1.1 Node.js是什么

       Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine.

  • Node.js不是一门语言
  • Node.js不是库、不是框架
  • Node.js是一个JavaScript运行时环境
  • 简单点来讲就是Node.js可以解析和执行JavaScript代码
  • 以前只有浏览器可以解析执行JavaScript代码
  • 也就是说现在的JavaScript可以完全脱离浏览器来运行,一切都归功于:Node.js

     

  • 浏览器中的JavaScript

  • ECMAScript
    • 基本的语法
    • if
    • var
    • function
    • Object
    • Array
  • BOM
  • DOM

Node.js中的JavaScript

  • 没有BOM、DOM
  • ECMASCRIPT
  • 在Node这个JavaScript执行环境中为JavaScript提供了一些服务器级别的操作API 
    • 文件读写
    • 网络服务的构建
    • 网络通信
    • http服务器
    • 等处理…

Node.js是构建与 Chrome的V8引擎的JavaScript 运行环境

  • 代码只是具有特定格式的字符串而已
  • 引擎可以认识它,引擎可以帮你去解析和执行
  • Google Chrome 的V8引擎是目前公认的解析执行JavaScript代码最快的
  • Node.js的作者把Google Chrome中的V8引擎移植了出来,开发了一个独立的JavaScript运行时环境。
     

Node.js uses an event-driven,non-blocking I/O model that makes it lightweight and efficient.

  • event-driven 事件驱动
  • non-blocking I/O model 非阻塞IO模型(异步)
  • lightweight and efficient 轻量和高效

Nodejs package ecosystem,npm,is the largest ecosystem of open source libraries in the world.

  • npm 是世界上最大的开源生态系统
  • 绝大多数JavaScript相关的包都放在了Npm上,这样做的目的是让开发人员更方便的去下载使用。
  • npm install jquery
     

1.2 Node.js能做什么?

Web 服务器后台

命令行工具  

  • npm(node)
  • git(c语言)
  • hexo(node)
  • webpack

对于前端开发工程师来将,接触node最多的是它的命令行工具 

自己写的很少,主要是使用别人第三方开发的 

  • webpack
  • gulp
  • npm

1.3 预备知识

  • HTML
  • CSS
  • JavaScript
  • 简单的命令行工具 
    • cd
    • dir
    • ls
    • mkdir
    • rm
  • 具有服务端开发经验更佳 
    • java
    • php

1.4 学习资源

  • 《深入浅出Node.js》
  • 《Node.js权威指南》
  • JavaScript标准参考教材:阮一峰
  • Node入门
  • 官方API文档
  • 中文文档(版本比较旧,凑合看)
  • CNODE社区: http://cnodejs.org
  • CNODE-新手入门:

1.5 这门课能学到什么?

B/S编程模型 

  • Browse-Server
  • back-end
  • 任何服务端技术这种BS编程模型都是一样的,和语言无关
  • Node只是作为我们学习BS编程的一个工具而已

模块化编程 

  • RequireJS
  • SeaJS
  • 在Node中可以像 @import() 一样来引用加载JavaScript脚本文件

Node常用API

  • 异步编程 
    • 回调函数
    • Promise
    • async
    • generator
  • Express Web 开发框架
  • ECMAScript 6
  • ……
  • 学习Node不仅会帮助打开服务器端黑盒子,同时会帮助学习以后前端高级内容 
    • Vue.js
    • React
    • Angular

2. 起步

   2.1 安装

  • 查看当前Node环境版本号
  • 下载:https://nodejs.org/en/download/
  • 安装: 
    • 傻瓜式的一路next就可以了
    • 对于已经安装过的,重新安装就会升级、
  • 确认Node环境是否安装成功 
    • 打开命令行,输入node --version
    • 或者node -v
  • 环境变量

修改完代码自动重启

nodemon是一个基于Node.js开发的一个第三方命令行工具,我们使用的时候需要独立安装:

npm install --global nodemon

安装完毕之后,使用:

node app.js
#使用nodemon
nodemon app.js

只要是通过 nodemon app.js启动的服务,则它会监视你的文件变化,当文件发生变化的时候,自然帮你重启服务器。

2.2 hello world

  • 创建编写JavaScript脚本文件,helloworld.js
  • 打开终端,定位到脚本文件所属目录,cd 目录名
  • 输入node 文件名 执行对应的文件
  • ps: 文件名不要使用node.js来命名,而且最好不要使用中文来命名。
  • 解析执行JavaScript
  • 读写文件
  • http

补充:

浏览器中的JavaScript是没有文件操作的能力的

但是,Node中的JavaScript具有文件的操作能力

响应内容只能是二进制数据或者字符串

  • 数字
  • 对象
  • 数组
  • 布尔值

上述,均可转换成二进制或者字符串(通过JSON.stringify()方法)

2.3 文件读取 

// 浏览器中的JavaScript是没有文件操作的能力的
// 但是Node中的JavaScript具有文件操作的能力

// fs是file-system的简写,就是文件系统的意思
// 在Node中如果想要进行文件操作,就必须引入fs这个模块
// 在fs这个核心模块中,就提供了所有的文件操作现相关的API
// 例如: fs.readFile就是用来读取文件的

//  1. 使用require方法加载fs核心模块
var fs = require('fs');

// 2. 读取文件 第一个参数就是要读取的文件路径
// 第二个参数是一个回调函数
//      error 读取失败,error就是错误对象,读取成功,error就是null
//      data 如果读取成功,data就是读取到的数据 读取失败,error就是错误对象

fs.readFile('./data/hello.txt', function(error,data){

    // 文件中存储的其实就是二进制数据 0 1
    // 这里为什么看到的不是0和1呢?原因是二进制转为16进制了
    // 但是无论是二进制还是16进制,人类都不认识
    // 所以我们可以通过toString方法把其转为我们能认识的字符

    if(err){
        console.log('读取文件失败');
    }else{
        console.log(data.toString());
    });
}

2.4 文件写入 

var fs = require('fs');
// 第一个参数:文件路径
// 第二个参数:文件内容
// 第三个参数:回调函数
fs.writeFile('./data/writeFile.txt','大家好,我是写入的内容',function(error){
    if(error){
        console.log('写入失败了');
    }else{
        console.log('文件写入成功');
    } 
});

2.5 http

// 使用Node非常轻松的构建一个web服务器
// 在Node中专门提供了一个核心模块,http
// http这个模块职责就是帮助创建编写服务器的

// 1. 加载http核心模块
var http = require('http');

// 2. 使用http.createServer()方法创建一个web服务器
// 返回一个Server实例

var server = http.createServer();


// 3. 服务器作用? 提供服务:数据服务
// 浏览器发请求——接收请求——处理请求——给个反馈(发送响应)——注册request请求事件
// 当客户端请求过来,就会自动触发服务武器的request请求事件,然后执行第二个参数:回调处理

server.on('request',function(){
    console.log('收到客户端的请求了');
});


// 4. 绑定端口号,启动服务器

server.listen(8888,function(){
    console.log('服务器启动成功了,可以通过http://127.0.0.1:3000/ 来进行访问');
});`
// 使用Node非常轻松的构建一个web服务器
// 在Node中专门提供了一个核心模块,http
// http这个模块职责就是帮助创建编写服务器的

// 1. 加载http核心模块
var http = require('http');

// 2. 使用http.createServer()方法创建一个web服务器
// 返回一个Server实例

var server = http.createServer();


// 3. 服务器作用? 提供服务:数据服务
// 浏览器发请求——接收请求——处理请求——给个反馈(发送响应)——注册request请求事件
// 当客户端请求过来,就会自动触发服务武器的request请求事件,然后执行第二个参数:回调处理

server.on('request',function(){
    console.log('收到客户端的请求了');
});


// 4. 绑定端口号,启动服务器

server.listen(8888,function(){
    console.log('服务器启动成功了,可以通过http://127.0.0.1:3000/ 来进行访问');
});

2.6 http案例

var http = require('http');
// 1. 创建Server
var server = http.createServer();
// 2. 监听request请求事件,设置请求处理函数
server.on('request',function(req,res){
    // console.log('收到请求了,请求的路径是:'+ req.url);
    // res.write('hello world');
    // res.end();

    // 上面的方式比较麻烦,推荐使用更简单的方式,直接end的同时
    //res.end('hello node.js');

    // 根据不同的请求路径发送不同的响应结果
    // 1. 获取请求的路径
    //      req.url 获取到的是端口号之后的那一部分路径
    //      也就是说所有的url都是以 / 开头的

    // 2. 判断路径处理响应
    var url = req.url;
    /*switch (url) {
        case '/':
            res.end('index page');
            break;
        case '/login':
            res.end('login page');
            break;
        default:
            res.end('404 not fund page');
            break;
    }*/

    if(url === '/products'){
        var products = [
            {
                name: '苹果',
                price: 2222
            },
            {
                name: '栗子',
                price: 3333
            },
            {
                name: '桃子',
                price: 4444
            }
        ]
        res.end(JSON.stringify(products));
    }
});

// 3. 绑定端口号,启动服务
server.listen(8000,function(){
    console.log('服务器启动成功,可以访问了!');
});

3. Node中的JavaScript

  • ECMAScript
    • 没有DOM、BOM
  • 核心模块
  • 第三方模块
  • 用户自定义模块

  3.1 核心模块

  • Node为JavaScript提供了很多服务器级别的API,这些API就大多数都被包装到了一个 具名的核心模块中了。
  • 例如: 
    • 文件操作的fs核心模块
    • http服务构建的http模块
    • path路径操作模块
    • os操作系统信息模块
  • 以后只要模块是一个核心模块,就要如下使用它:
var fs = require('fs');
var http = require('http');

Node中,模块有三种: 

  • 具名的核心模块,例如:fs,http
  • 用户自己编写的文件模块(相对路径必须加./)

在Node中,没有全局作用域,只有模块作用域 

  • 外部访问不到内部
  • 内部也访问不到外部

require方法有两个作用: 

  • 加载文件模块并执行里面的代码
  • 拿到被加载文件模块导出的接口对象
  • export 默认是一个空对象

3.2 用户自定义模块

  • require
  • exports

3.3 第三方模块

 

4. Web服务器开发

    4.1 IP地址和端口号

  • 所有联网的程序都需要进行网络通信
  • 计算机中只有一个物理网卡,而且同一个局域网中,网卡的地址必须是唯一的。
  • 网卡是通过唯一的IP地址来进行定位的。
  • IP地址用来定位计算机
  • 端口号用来定位具体的应用程序(所有需要联网通信的软件都必须具有端口号)
  • 一切需要联网通信的软件都会占用一个端口号
  • 端口号的范围从:0-65536之间
  • 在计算机中有一些默认端口号,最好不要去使用 
  • 例如http服务的80
  • 我们在开发过程中使用一些简单的好机的就可以了,例如3000,5000等没有什么含义
  • 可以同时开启多个服务,但一定要确保不同服务占用的端口号不一致才可以
  • 说白了,在一台计算机中,同一个端口号同一时间只能被一个程序占用。

5. 留言本

6. Nodejs中的系统模块

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值