Node.js学习总结

目录

一、Node.js 基础

1.Node.js 是什么

2.Node.js 安装

3.Node.js 特性

4.Node.js的简单使用

(1) 、命令终端

(2) 、文件型使用

二、NPM

1.NPM是什么

2.NPM使用

(1)、使用淘宝镜像的命令

(2)、npm 命令安装模块

(3)、全局安装与本地安装

(4)、查看安装信息

(5)、 package.json

(6)、卸载模块

(7)、更新模块

(8)、搜索模块

(9)、创建模块

(10)、NPM 常用命令

三、Node.js扩展

1.Node.js REPL

(1)、REPL 命令

(2)、停止 REPL

2.require详解

3.文件系统

4.http 

5.path

6.express框架


一、Node.js 基础

1.Node.js 是什么

  • 不是一门语言,不是库,不是框架
  • 是一个JavaScript运行时环境,简单点说就是node.js可以解析和执行JavaScript代码
  • nodejs使用JavaScript语言编程,运行在JavaScript引擎上(V8)
  • node.js为JavaScript提供了许多服务器级别的操作API(http,fs等)
  • node.js包含EcmaScript,但是不包含DOM,BOM,编码方法同JavaScript
  • node.js是一个基于 Chrome浏览器 V8 引擎的 JavaScript 运行时(环境)
  • node可以理解为是nodejs的作者基于Chrome浏览器的V8引擎,使用JavaScript开发的一个平台(环境),所以node可以解析和执行JavaScript代码
  • Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台
  • Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。

2.Node.js 安装

Node.js 安装教程:Node.js 安装配置 | 菜鸟教程

Node.js 安装注意:

  • Node.js 的安装直接前往官网安装即可,根据需求选择版本
  • 配置环境变量
  • 设置npm安装程序时的默认位置,和缓存位置

npm config set prefix "D:\nodejs\X64\node_global"  //默认位置

npm config set cache "D:\nodejs\X64\node_cache" //缓存位置

注:先在相应的位置建立文件node_global和node_cache,再设置

  • 设置环境变量NODE_PATH 

NODE_PATH = D:\nodejs\X64\node_global\node_modules(很重要,尤其是全局安装node插件时),否则会出现XXX不是内部命令的错误。

3.Node.js 特性

  • 单线程

在Java,PHP或者.net语言中,会为每一个客户端连接创建一个新的线程,而每个线程需要耗费大约2MB内存,所以就会 限制同时连接的用户数量。Node.js不为每个客户连接创建一个新的线程,而仅仅使用一个线程,当有用户连接了就触发一 个内部事件,通过非阻塞I/O、事件驱动机制,让Nodejs程序宏观上也是并行的,大大提高用户的连接数量(性能)。

  • 非阻塞IO模型(IO指 input  output  输入 输出)

当在访问数据库取得数据的时候,需要一段时间,在传统的单线程处理机制中,在执行了访问数据库代码之后,整个线程都  将暂停下来,等待数据库返回结果,才能执行后面的代码,也就是说,I / O阻塞了代码的执行,极大的降低了程序的执行效率,而Nodejs中采用了非阻塞型I / O机制,因此在执行访问数据库的代码之后,将立即转而执行其后面的代码,把数据库返回的结果处理代码放在回调函数中,从而提高了程序的执行效率,当某个I / O执行完毕时,将以事件的形式通知执行I / O操作的线程,线程执行这个事件的回调函数,为了处理异步I / O,线程必须有事件循环,不断的检查有没有未处理的 事件,依次予以处理。阻塞模式下,一个线程只能处理一项任务,想要提高吞吐量必须通过多线程,而非阻塞模式下,一个线程永远在执行计算操作,这个线程的CPU核心利用率永远是100 %。

  • 事件驱动

在Nodejs中,客户端请求建立连接,提交数据等行为,会触发相应的事件。在Node中,在一个时刻,只能执行一个事件回    调函数,但是在执行一个事件回调函数的中途,可以转而处理其他事件(比如,又有新用户连接了),然后返回继续执行      原  事件的回调函数,这种处理机制,称为“事件环”机制。

  • 轻量和高效 
  • 没有全局作用域

只有模块作用域,所以不能进行像JavaScript那样的变量等的访问、调用操作
Nodejs中没有根目录(目录)的概念,因为它没有任何的web容器(可以理解成相当于一个服务器,如Apache/Tomcat)

4.Node.js的简单使用

(1) 、命令终端

  • Node.js的全局对象是 global ; javascript的全局对象是 window
  • 直接在命令终端中输入node,然后回车,就会出现 ‘>’ 标识,然后就可以写js语法了
  • 命令终端退出: Ctrl + c 两次

(2) 、文件型使用

  • 命令行键盘 tab 键 自动补全文件名称

  • 执行文件/运行文件:
$ node 文件名称.js

二、NPM

1.NPM是什么

NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:

  • 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
  • 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
  • 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。

注:

  • 输入 "npm -v" 来测试是否成功安装

 

2.NPM使用

(1)、使用淘宝镜像的命令

大家都知道国内直接使用 npm 的官方镜像是非常慢的,这里推荐使用淘宝 NPM 镜像。

淘宝 NPM 镜像是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。

你可以使用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:

 npm install -g cnpm --registry=https://registry.npm.taobao.org

 这样就可以使用 cnpm 命令来安装模块了:

cnpm install [name]

(2)、npm 命令安装模块

npm 安装 Node.js 模块语法格式如下:

npm install <Module Name>

以下实例,我们使用 npm 命令安装常用的 Node.js web框架模块 express:

 npm install express

express 包就放在了工程目录下的 node_modules 目录中

因此在代码中只需要通过 require('express') 的方式引用就好,无需指定第三方包路径。 

var express = require('express');

(3)、全局安装与本地安装

npm 的包安装分为本地安装(local)、全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已,比如

npm install express          # 本地安装
npm install express -g   # 全局安装

本地安装:

  • 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。
  • 可以通过 require() 来引入本地安装的包。

全局安装:

  • 将安装包放在 /usr/local 下或者你 node 的安装目录。
  • 可以直接在命令行里使用。

(4)、查看安装信息

可以使用以下命令来查看所有全局安装的模块:

npm list -g

(5)、 package.json

Package.json 属性说明:

  • name - 包名。

  • version - 包的版本号。

  • description - 包的描述。

  • homepage - 包的官网 url 。

  • author - 包的作者姓名。

  • contributors - 包的其他贡献者姓名。

  • dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。

  • repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。

  • main - main 字段指定了程序的主入口文件,require('moduleName') 就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js。

  • keywords - 关键字

(6)、卸载模块

卸载 Node.js 模块:

npm uninstall express

卸载后,你可以到 /node_modules/ 目录下查看包是否还存在,或者使用以下命令查看:

npm ls

(7)、更新模块

我们可以使用以下命令更新模块:

npm update express

 

(8)、搜索模块

使用以下来搜索模块:

npm search express

(9)、创建模块

$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (node_modules) runoob                   # 模块名
version: (1.0.0) 
description: Node.js 测试模块(www.runoob.com)  # 描述
entry point: (index.js) 
test command: make test
git repository: https://github.com/runoob/runoob.git  # Github 地址
keywords: 
author: 
license: (ISC) 
About to write to ……/node_modules/package.json:      # 生成地址

{
  "name": "runoob",
  "version": "1.0.0",
  "description": "Node.js 测试模块(www.runoob.com)",
  ……
}


Is this ok? (yes) yes

可以使用以下命令在 npm 资源库中注册用户(使用邮箱注册):

$ npm adduser
Username: mcmohd
Password:
Email: (this IS public) mcmohd@gmail.com

接下来我们就用以下命令来发布模块:

npm publish

 

(10)、NPM 常用命令

NPM提供了很多命令,例如install和publish,使用npm help可查看所有命令。

  • NPM提供了很多命令,例如installpublish使用npm help可查看所有命令

  • 使用npm help <command>可查看某条命令的详细帮助,例如npm help install

  • package.json所在目录下使用npm install . -g可先在本地安装当前命令行程序,可用于发布前的本地测试。

  • 使用npm update <package>可以把当前目录下node_modules子目录里边的对应模块更新至最新版本。

  • 使用npm update <package> -g可以把全局安装的对应命令行程序更新至最新版。

  • 使用npm cache clear可以清空NPM本地缓存,用于对付使用相同版本号发布新版本代码的人。

  • 使用npm unpublish <package>@<version>可以撤销发布自己发布过的某个版本代码

三、Node.js扩展

1.Node.js REPL

Node 自带了交互式解释器,可以执行以下任务:

  • 读取 - 读取用户输入,解析输入的 Javascript 数据结构并存储在内存中。

  • 执行 - 执行输入的数据结构

  • 打印 - 输出结果

  • 循环 - 循环操作以上步骤直到用户两次按下 ctrl-c 按钮退出。

(1)、REPL 命令

  • ctrl + c - 退出当前终端。

  • ctrl + c 按下两次 - 退出 Node REPL。

  • ctrl + d - 退出 Node REPL.

  • 向上/向下 键 - 查看输入的历史命令

  • tab 键 - 列出当前命令

  • .help - 列出使用命令

  • .break - 退出多行表达式

  • .clear - 退出多行表达式

  • .save filename - 保存当前的 Node REPL 会话到指定文件

  • .load filename - 载入当前 Node REPL 会话的文件内容。

(2)、停止 REPL

按下两次 ctrl + c 键就能退出 REPL:

$ node
>
(^C again to quit)
>

 

2.require详解

nodejsrequire使用非常频繁,或者说在模块化开发中起到非常重要的作用

使用通常类似这样:

var fs = require('fs')
const http = require('http')

可是你真的了解它吗?在node中require方法有两个作用

  1. 加载文件模块并执行里面的代码
  2. 拿到被加载文件模块导出的接口对象  (exports)

3.文件系统

FileSystem,文件系统,样例:


// 引入fs模块
const fs = require('fs')
// 读文件
fs.readFile('./我的生词本.txt', function (err, data) {
  console.log(data.toString())
  console.log(err)
})
// 写文件
fs.writeFile('./writeFile.txt', '大家好,我是帅哥!', function (err) {
  console.log('文件写入成功')
  console.log(err)
})

4.http 

使用http  API可以快速的创建一个服务器


// 引入http模块
const http = require('http')
// 创建一个web服务器(使用createServe方法,返回一个Serve实例)
var serve = http.createServer();
// 注册 request 请求事件(当客户端发请求过来就会自动触发 request 请求事件,执行回调函数)
// 回调函数接收两个参数,request,response
// request是客户端发送的请求信息
// response有一个write方法,可以用来向客户端发送响应信息
serve.on('request', function (request, response) {
  console.log('客户端请求发送成功')
  // console.log(request)
  response.writeHead(200, { 'Content-Type': 'text/plain;charset=UTF8' })// 设置响应头
  response.write('这是服务端向客户端响应的内容~~~')
  response.write('nodejs')
  // 通过response.end方法结束响应,告诉客户端,服务端响应完毕
  response.end()
})
// 绑定端口号,启动服务器
serve.listen('5000', function () {
  console.log('服务器启动成功了~')
})

// 创建一个服务,并加载html文件,展示页面
var http=require("http");
var fs=require("fs"); //导入文件模块
var server =http.createServer(function(req,res){
    //设置头信息
    res.setHeader("Content-Type","text/html;charset='utf-8'");
    //读文件
     fs.readFile("./index.html","utf-8",function(err,data){
         if(err) {
           console.log("index.html loading is failed :"+err);
         } else {
           //返回index.html页面
           res.end(data);
         }
     });
}).listen(8888); //监听端口,注:一个程序只能监听一个端口

 

5.path

path模块提供了一些用于处理文件与目录的路径的实用工具。

最常用的resolve方法:

// path
const path = require('path')
// 使用如:
index: path.resolve(__dirname, '../dist/index.html'),
// path.resolve() 方法将路径或路径片段的序列解析为绝对路径,
// 给定的路径序列从右到左进行处理,每个后续的 path 前置,直到构造出一个绝对路径
// 如果任何参数不是字符串,则抛出 TypeError

Node.js中提供了两个与文件操作相关全局可用变量__dirname__filename,__dirname表示当前文件所在的目录,__filename表示正在执行脚本的文件名。

 

6.express框架

express是基于 Node.js 平台,快速、开放、极简的 Web 开发框架。

原生的node开发存在很多问题:

  • 呈递静态页面很不方便,需要处理每个http请求,还要处理304问题
  • 路由处理代码不直观清晰,需要很多正则表达式和字符串函数
  • 不能集中精力写业务,要考虑很多其他的东西

所以express框架应运而生: 

  • express框架有着惊艳的路由能力,正则提取数据能力足够一般工作使用
  • express中的静态文件处理就是一句话的事
  • express与模板引擎的配合更直观清晰

Express 框架核心特性:

  • 可以设置中间件来响应 HTTP 请求。

  • 定义了路由表用于执行不同的 HTTP 请求动作。

  • 可以通过向模板传递参数来动态渲染 HTML 页面。

安装 Express 并将其保存到依赖列表中:

$ cnpm install express --save

以上命令会将 Express 框架安装在当前目录的 node_modules 目录中, node_modules 目录下会自动创建 express 目录。以下几个重要的模块是需要与 express 框架一起安装的:

  • body-parser - node.js 中间件,用于处理 JSON, Raw, Text 和 URL 编码的数据。

  • cookie-parser - 这就是一个解析Cookie的工具。通过req.cookies可以取到传过来的cookie,并把它们转成对象。

  • multer - node.js 中间件,用于处理 enctype="multipart/form-data"(设置表单的MIME编码)的表单数据。

$ cnpm install body-parser --save
$ cnpm install cookie-parser --save
$ cnpm install multer --save

Express 框架实例 

//express_demo.js 文件
var express = require('express');
var app = express();
 
app.get('/', function (req, res) {
   res.send('Hello World');
})
 
var server = app.listen(8081, function () {
 
  var host = server.address().address
  var port = server.address().port
 
  console.log("应用实例,访问地址为 http://%s:%s", host, port)
 
})

//输出 "Hello World"

 


本文由博主在学习过程中所写,如有错误和问题,望理解。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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
发出的红包

打赏作者

萌新小吉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值