nodejs入门教程
- 1.前言
- 2.入门教程
-
- 2.1 命令行运行node.js脚本
- 2.2 退出node.js程序
- 2.3 如何使用 Node.js REPL
- 2.4 从命令行接收参数(参数可以是独立的,也可以具有键和值。)
- 2.5 使用node.js输出到命令行
- 2.6 在 Node.js 中从命令行接收输入(交互性)
- 2.7 使用 exports 从 Node.js 文件中公开功能
- 2.8 包管理器
-
- 2.8.1 npm 是 Node.js 标准的软件包管理器
- 2.8.2 下载
- 2.8.3 更新
- 2.8.4 版本控制
- 2.8.5 运行任务
- 2.8.6 软件安装到了哪里
- 2.8.7 如何使用或者执行安装的软件包
- 2.8.8 package.json 指南
- 2.8.9 package-lock.json 文件
- 2.8.10 查看 npm 包安装的版本
- 2.8.11 安装 npm 包的旧版本
- 2.8.12 将所有 Node.js 依赖包更新到最新版本
- 2.8.13 使用 npm 的语义版本控制
- 2.8.14 卸载 npm 软件包
- 2.8.15 npm 全局或本地的软件包
- 2.8.16 npm 依赖与开发依赖
- 2.8.17 Node.js 包运行器 npx
- 2.9 Node.js 事件循环
- 2.10 了解 process.nextTick()
- 2.10 了解 setImmediate()
- 2.11 探索 JavaScript 定时器
- 2.12 JavaScript 异步编程与回调
- 2.13 了解 JavaScript Promise
- 2.14 具有 Async 和 Await 的现代异步 JavaScrip
- 2.15 Node.js 事件触发器
- 2.16 http服务
- 2.17 文件操作
- 2.18 文件目录操作
1.前言
首先说明,本篇文章是对nodejs官网入门教程的一份总结。同学们学习时强烈建议先前往nodejs官网入门教程学习,那里几乎有你们需要的一切。本篇文章只对相对重要的知识点进行记录和编码测试,便于未来对nodejs项目进行系统性的学习。
2.入门教程
2.1 命令行运行node.js脚本
如果主Node.js应用程序文件是 app.js,则可以通过键入以下命令调用它:
node app.js
2.2 退出node.js程序
1、命令行使用ctrl+c可以停止node.js程序
2、非正常退出(不推荐):process 核心模块提供了process.exit()方法,以编程的方式强制停止程序。这意味着任何待处理的回调、仍在发送中的任何网络请求、任何文件系统访问、或正在写入 stdout 或 stderr 的进程,所有这些都会被立即非正常地终止。可以传入一个整数,向操作系统发送退出码:
process.exitCode = 1
也可以设置 process.exitCode 属性:
process.exitCode = 1
当程序结束时,Node.js 会返回该退出码。当进程完成所有处理后,程序会正常地退出。
3、使用SIGTERM 信号退出
const express = require('express')
const app = express()
app.get('/', (req, res) => {
res.send('你好')
})
const server = app.listen(3000, () => console.log('服务器已就绪'))
process.on('SIGTERM', () => {
server.close(() => {
console.log('进程已终止')
})
})
process.kill(process.pid, 'SIGTERM')
2.3 如何使用 Node.js REPL
注意:REPL 也被称为运行评估打印循环,是一种编程语言环境(主要是控制台窗口),它使用单个表达式作为用户输入,并在执行后将结果返回到控制台。
2.3.1 使用方式
简单点说,就是你可以简单地把控制台当成
REPL是交互式的,这意味着,你可以使用tab键自动补全预定义的变量。
尝试输入 JavaScript 类或者全局对象的名称,例如 Number,添加一个点号并按下 tab。REPL 会打印可以在该类上访问的所有属性和方法:
2.3.2 点命令
.help
.help :显示点命令的帮助文档
.editor
.editor:启用编辑器模式,可以轻松地编写多行 JavaScript 代码。当处于此模式时,按下 Ctrl+D 可以运行编写的代码。
并且通过实验,我们可以得知,REPL对之前声明的变量是有记忆的,并且不允许重复声明。
如果需要一个全新的环境,可以使用Ctrl+D退出REPL后再node重新进入:
.break
.break:当输入多行的表达式时,输入 .break 命令可以中止进一步的输入。相当于按下 Ctrl+C。
当输入函数,比如:
[1, 2, 3].forEach(num => {
或者
function test(){
REPL会了解当前函数未完成,自动进入多行编辑模式,…表示仍在编辑中,也可以当成tab缩进。
.save
.save:将在 REPL 会话中输入的所有内容保存到文件(需指定文件名)。
.load
.load: 加载 JavaScript 文件(需要指定文件名)。
.exit
.exit:退出 REPL(相当于按下两次 ctrl-C)。
.clear
.clear:将 REPL 上下文重置为空对象,并清除当前正在输入的任何多行的表达式。
在Node.js的模块文件中,start方法返回被开启的REPL运行环境,可以为REPL运行环境指定一个上下文对象(context),可以将该上下文对象保存的变量作为REPL运行环境中的全局变量来进行使用。可以看到,使用.clear命令后,上下文对象保存的变量都变成了not defined(未声明)。
不过,值得注意的是,当未指定特定的js文件repl作为上下文,而是直接使用命令node进入REPL的话,.clear命令并不会生效。
2.4 从命令行接收参数(参数可以是独立的,也可以具有键和值。)
获取参数值的方法是使用 Node.js 中内置的 process 对象,它公开了 argv 属性,该属性是一个包含所有命令行调用参数的数组。
第一个参数是 node 命令的完整路径。
第二个参数是正被执行的文件的完整路径。
所有其他的参数从第三个位置开始。
demo04.js测试代码:
process.argv.forEach((val, index) => {
console.log(`${index}: ${val}`)
})
1、当不携带参数时:
node demo04.js
只返回node 命令的完整路径和正被执行的文件的完整路径。
2、当携带独立参数时:
node demo04.js joe
3、当携带具有键和值的参数时:
node demo04.js name=joe
此时需要对参数进行解析,最好的方法是使用 minimist 库,该库有助于处理参数,但是需要在每个参数名称之前使用双破折号:
console.log(process.argv.slice(2))
const args = require('minimist')(process.argv.slice(2))
console.log(args)
console.log('name:'+args['name'],' sex:'+args['sex'])
话说,为什么要在在命令行接收参数呢?我的猜测是,可能程序运行的时候可以根据参数进行以何种模式运行,当然不带参数就是默认模式。
2.5 使用node.js输出到命令行
2.5.1 基础输出
Node.js 提供了 console 模块,该模块提供了大量非常有用的与命令行交互的方法。
它基本上与浏览器中的 console 对象相同。
%s 会格式化变量为字符串
%d 会格式化变量为数字
%i 会格式化变量为其整数部分
%o 会格式化变量为对象
const x = 10;
const y = 20;
console.log(x+y)
const cat = {
species:'猫',
name:'Tom',
age: 3.1,
time:0.05
}
console.log('我的%s名字叫%s,已经%i岁了,反应时间是%d秒',cat.species,cat.name,cat.age,cat.time)
console.log(Number)
console.log('%o', Number)
2.5.2 清空控制台
console.clear() 会清除控制台(其行为可能取决于所使用的控制台)。
可以看到console.clear()之前的输出语句的结果都被清空了。
2.5.3 元素计数
console.count() 是一个便利的方法。
可以看到,console.count()是针对整个输出语句进行计数的,只要有变化就是另一个语句。
2.5.4 打印堆栈踪迹
在某些情况下,打印函数的调用堆栈踪迹很有用,可以回答以下问题:如何到达代码的那一部分?
可以使用 console.trace() 实现:
const function2 = () => console.trace()
const function1 = () => function2()
function1()
这会打印堆栈踪迹。 如果在 Node.js REPL 中尝试此操作,则会打印以下内容:
打