Node.js知识学习总结

一、什么是node.js?

Node.js是一个Javascript运行环境。实际上它是对Google V8引擎进行了封装。V8引 擎执行Javascript的速度非常快,性能非常好。Node.js对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行得更好。

node.js的本质:是一个能编译你写的js代码并让计算机识别并执行的编译环境,一般我们会用的到浏览器的内核来编译解析我们的JS代码,而Node是另一种运行环境(所以Node.js是一个平台,不是一种语言,更不是什么后端语言,也不是什么前端框架,它是由C++编写的JavaScript的运行环境—— 虚拟机)。

举个例子:
打开你的Chrome进入到console的窗口,输入window得到的是浏览器的顶层对象。打开命令行输入node进入node环境,在node环境下输入window会产生报错。这是为什么呢?因为虽然两个环境都是能运行解析JavaScript的,但是它们的底层是不一样的,在node中并没有window这个对象,它有的是 process这个全局对象。

1.总结:

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

2.浏览器中的JavaScript

  • EcmaScript
  • BOM
  • DOM

3.node.js中的JavaScript

  • 没有BOM、DOM
  • 有EcmaScript
  • 在node.js这个JavaScript执行环境中为JavaScript提供了一些服务器级别的操作API,例如:
(1)文件的读写

(2)网络服务的构建

(3)网络通信

(4)http服务器......

4.npm

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

5.node.js 的特性

  • 事件驱动
  • 非阻塞IO模型(异步)
  • 轻量和高效

6.node.js构建于Chrome的V8引擎之上

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

7.node.js能做什么

  • .web服务器后台
  • 命令行工具
(1)npm(node)

(2)git(c语言)

(3)hexo(node)......
  • 对于前端开发工程师来讲,接触node最多的是它的命令行工具,自己写的很少,主要是使用别人(第三方)开发的:
(1)webpake

(2)gulp

(3)npm

二、node.js能学到什么?

1.B/S模型编程(Browser-Server)

2.模块化编程

  • RequireJS
  • SeaJS
  • 以前认知的JavaScript只能通过script标签来加载,在node.js中可以像@import()一样来引用JavaScript脚本文件

3.node常用的API

4.异步编程

  • 回调函数
  • Promise
  • async
  • generator

5.Express Web 开发框架

6.ES6

三、node.js的优点

1. 解析js代码

没有浏览器安全级的限制

2.提供系统级别的API

(1)文件的读入

(2)进程的管理

(3)网络通信

3.单线程

Node.js可以在不新增额外线程的情况下,依然可以对任务进行并发处理 —— Node.js是单线程的。它通过事件轮询(event loop)来实现并发操作,对此,我们应该要充分利用这一点 —— 尽可能的避免阻塞操作,取而代之,多使用非阻塞操作。

4.非阻塞IO

所有API异步是非阻塞。

5.事件驱动

6.V8虚拟机

正在构建在谷歌Chrome的V8 JavaScript引擎,Node.js库代码执行是非常快的。

7.无缓冲

Node.js的应用从来没有缓冲任何数据。这些应用程序只需输出块中的数据。(即流应用)

三、如何使用node.js?

1.在官网下载node.js后,打开cmd/git bash输入以下命令:
在这里插入图片描述
如显示版本号,则表示安装成功。

2.在文件夹中执行以下命令

$ npm install colors

该命令意思是在该文件夹下安装colors这个模块。

可以在该文件夹下面新建一个JS文件,内容为

require('colors')
console.log('smashing node'.rainbow)

执行文件

$ node **.js  //这里可以忽略文件的后缀名js

正常情况就能看到输出的文件已经有不同颜色的效果。

四、node中的JS —— 模块系统

1.在node中,模块有三种:
  • 具名的核心模块:例如fs、http等
  • 用户自己编写的模块:相对路径必须加./

在node中,没有全局作用域,只有模块作用域,如a.js引入b.js文件后,a.js中用var定义的变量不能作用到b.js中。
在这里插入图片描述
那我们如何解决上述问题呢?我们可以exports对象来解决

2. exports

每个文件模块中都提供了一个对象:exportsexports默认是一个空对象
在这里插入图片描述
通过上述代码中的方式我们就可以在a.js中通过req.foo这样的方式来调用b.js中的东西了

五、node.js中提供的API

1.读写文件(fs模块)

(1)读文件:readFile()方法

let fs = require("fs");

//第一个参数:文件路径
//第二个参数:回调函数
/*回调函数参数:
     第一个参数:错误信息
     第二个参数:文件数据
*/
/*
    文件读取成功:error返回null,data返回数据
    文件读取失败:error返回错误对象,data返回undefined没有数据
*/
fs.readFile("./hello_world.txt",function(error,data){  
    console.log(data)  //输出16进制数据
    console.log(data.toString())  //将16进制转为字符串
})

(2)写文件:writeFile()方法

let fs = require("fs");

//第一个参数:文件路径
//第二个参数:写入的内容
//第三个参数:回调函数
/*
    回调函数中的error参数:
        文件写入成功:返回null
        文件写入失败:返回错误对象
*/
fs.writeFile("./hello.txt","你好,我是node.js!",function(error){
    console.log(error)  //输出null
})

2.创建Web服务器(http模块)

//1.加载http核心模块
let http = require("http");

//2.使用http.createServer()方法创建一个web服务器,返回一个server实例
let server = http.createServer();

/*
    服务器要干嘛?
        提供服务:对数据的服务
        a.客户端发送请求;
        b.服务器接受请求;
        c.服务器处理请求;
        d.服务器给客户端反馈(发送响应);
*/
//3.注册request(不能改名)请求事件:
//	当客户端请求过来,就会自动触发服务器的 request 请求事件,然后执行第二个参数:回调处理函数
server.on("request",function(){
    console.log("接收到客户端的请求了!")
})

//4.绑定端口号,启动服务器
server.listen(3000,function(){
    console.log("服务器启动成功,可以通过http://127.0.0.1:3000/来进行访问!")
})

运行结果
在这里插入图片描述
输入网址请求几次,命令行就会显示几次接收成功的消息,如果按ctrl+c关闭服务器,再次请求,页面会显示无法找到网站。

发送响应

将响应的数据呈现给客户端

let http = require("http");

let server = http.createServer();

// request 请求事件处理函数,需要接收两个参数:
//     Request 请求对象:
//         可以用来获取客户端的一些请求信息,例如:请求路径
//     Respose 响应对象:
//         可以用来给客户端发送响应信息
server.on("request",function(request,response){
    // http://127.0.0.1:3000/  输出 / 
    // http://127.0.0.1:3000/a  输出 /a 
    // http://127.0.0.1:3000/a/b  输出 /a/b  
    console.log("接收到客户端的请求了,请求路径是"+request.url)

    // response 对象只有一个方法: write 可以用来给客户端发送响应数据
    // write 可以多次使用,但是最后一定要用 end 方法来结束响应,否则客户端会一直等待,即页面不会显示响应的数据
    response.write("hello")
    response.write(" node.js!")
    // 告诉客户端,我的话说完了,你可以呈递给用户了
    response.end()
})

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

运行结果
在这里插入图片描述
在这里插入图片描述
下面我们来思考一个问题:

如果我希望当请求不同的路径的时候响应不同的结果,例如:
    输入http://127.0.0.1:3000/的时候,           响应index
    输入http://127.0.0.1:3000/login的时候,      响应登录
    输入http://127.0.0.1:3000/register的时候,   响应注册

那我们是不是可以用判断语句来解决这个问题。

let http = require("http")

let server = http.createServer()

server.on("request",function(req, res){
    console.log("收到请求了,请求的地址是:"+ req.url)
    res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
    // res.write("hello")
    // res.write(" world!")
    // res.end()

    //一般我们不会像以上那样用多个write方法来输出响应的内容
    //我们一般用end方法结束响应的时候去输出响应的内容,如:
    //res.end("hello world!")
    let url = req.url
    if(url == "/"){
        //注意:响应的内容只能是二进制数据或者字符串
        //数字、对象、数组、布尔值等不能响应
        //可以通过JSON.stringify()等方法先转换再传入
        res.end("index")
    }else if(url == "/login"){

        res.end("登录")
    }else if(url == "register"){
        res.end("注册")
    }
})

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

解决乱码的方法

res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});

补充:

1.  IP地址用来定位计算机

2. 端口号用来定位具体的应用程序(所有需要联网通信的软件都必须占有一个端口号) 
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一条 Node.js学习路线,供你参考: 1. 开始学习 JavaScript。掌握基本语法和特性,包括变量、数据类型、条件语句、循环语句、函数、对象、数组等。可以通过 W3School 或者 MDN 等网站进行学习。 2. 掌握 Node.js 的基本概念和基础知识。了解 Node.js 的历史、特点、应用场景等,同时学习 Node.js 的模块系统、事件循环、异步编程等基本概念。 3. 学习 Node.js 的核心模块。Node.js 提供了众多内置的模块,如文件系统、HTTP、网络、流等,需要掌握这些模块的使用方法。 4. 掌握 Node.js 的第三方模块。Node.js 生态系统非常丰富,有很多优秀的第三方模块,如 Express、Koa、Socket.io 等,需要学习这些模块的使用方法。 5. 学习数据库操作。Node.js 可以连接多种类型的数据库,如 MySQL、MongoDB、Redis 等,需要掌握数据库的基本操作和连接方法。 6. 学习 Web 开发。使用 Node.js 可以轻松创建 Web 应用程序,需要学习 HTML、CSS、JavaScript 等前端技术,以及 Express、Koa 等 Web 框架的使用方法。 7. 学习安全性。在开发 Web 应用程序时需要注意安全性,如 XSS、CSRF、SQL 注入等,需要掌握一些基本的安全知识和防御方法。 8. 学习性能优化。Node.js 应用程序需要考虑性能问题,如优化代码、减少请求响应时间、减少资源消耗等,需要学习一些性能优化技巧和工具。 9. 学习测试和调试。在开发 Node.js 应用程序时需要进行测试和调试,需要学习一些测试框架和工具,如 Mocha、Chai、SuperTest 等。 10. 学习部署和维护。Node.js 应用程序需要部署到生产环境中,并进行维护和监控,需要学习一些部署和维护技巧和工具,如 PM2、Nginx、Logrotate 等。 以上是 Node.js学习路线,需要不断实践和总结,才能掌握 Node.js 的核心技术和应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值