Node.js 入门教程 7 从命令行运行 Node.js 脚本 8 如何退出 Node.js 程序

news2025/2/27 14:25:16

Node.js 入门教程

Node.js官方入门教程

Node.js中文网

本文仅用于学习记录,不存在任何商业用途,如侵删

文章目录

      • Node.js 入门教程
      • 7 从命令行运行 Node.js 脚本
      • 8 如何退出 Node.js 程序

7 从命令行运行 Node.js 脚本

运行 Node.js 程序的常用方法是,运行全局可用的命令 node(安装 Node.js 之后)并且传入您要执行的文件的名称。

如果您的 Node.js 主应用程序文件是 app.js,则您可以通过键入以下来调用它:

在这里插入图片描述

以上,你显式地告诉 shell 使用 node 运行你的脚本。 您也可以使用 “shebang” 行将此信息嵌入到 JavaScript 文件中。 “shebang” 是文件的第一行,它告诉操作系统使用哪个解释器来运行脚本。

Shebang(也称为Hashbang)是一个由井号和叹号构成的字符串行(#!),其出现在文本文件的第一行的前两个字符。Shebang用于指定命令的解释器

以下是 JavaScript 的第一行

#!/usr/bin/node

以上,我们显式地给出了解释器的绝对路径。 并非所有操作系统的 bin 文件夹中都有 node,但都应该有 env。 您可以告诉操作系统使用 node 为参数运行 env

#!/usr/bin/env node

// 你的代码

【啊这,Windows怕是不行】【这都是Linux里面】

要使用 shebang,您的文件应该具有可执行权限。

您可以通过运行以下赋予 app.js 可执行权限:

chmod u+x app.js

当运行命令时,请确保您位于包含 app.js 文件的同一目录中。【果然】

8 如何退出 Node.js 程序

有多种方法可以终止 Node.js 应用程序。

当在控制台中运行程序时,可以用 ctrl-C 关闭它,

在这里插入图片描述

但我们这里要讨论的是以编程方式退出。

让我们从最极端的开始,看看为什么最好不要使用它。

process 核心模块提供了一种方便的方法,允许您以编程方式退出 Node.js 程序:process.exit()

当 Node.js 运行此行时,进程立即被强制终止。

这意味着任何待处理的回调、任何仍在发送的网络请求、任何文件系统访问、或者正在写入 stdoutstderr 的进程,所有这些都将立即被非正常地终止。

如果这对您来说没问题,您可以传入一个整数,向操作系统发出退出代码的信号:

process.exit(1)

默认的退出码为 0,表示成功。

不同的退出代码有不同的含义,您可能希望在自己的系统中使用它来让程序与其他程序通信。

您可以在 http://nodejs.cn/api/process.html#process_exit_codes 关于退出代码的信息。【会员就离谱】

你也可以设置 process.exitCode 属性:

process.exitCode = 1

当程序结束时,Node.js 将返回该退出代码。

当所有处理完成后,程序将正常地退出。

很多时候我们使用 Node.js 启动服务器,比如下面这个 HTTP 服务器:

const express = require('express')
const app = express()


app.get('/', (req, res) => {
  res.send('Hi!')
})


app.listen(3000, () => console.log('Server ready'))

Express 是一个在底层使用 http 模块的框架,app.listen() 返回一个 http 实例。 如果您需要使用 HTTPS 为您的应用程序提供服务,则使用 https.createServer,因为 app.listen 仅使用 http 模块。

这个程序永远不会结束。

如果您调用 process.exit(),则任何当前待处理或正在运行的请求都将被中止。 这并不好。

在这种情况下,您需要向命令发送 SIGTERM 信号,并使用进程信号句柄处理它:

注意:process 不需要 “require”,它是自动可用的。

const express = require('express')

const app = express()

app.get('/', (req, res) => {
  res.send('Hi!')
})

const server = app.listen(3000, () => console.log('Server ready'))

process.on('SIGTERM', () => {
  server.close(() => {
    console.log('Process terminated')
  })
})

什么是信号?信号是一个 POSIX 互通系统:发送给进程的通知,以便通知它发生的事件。

SIGKILL 是告诉进程立即终止的信号,理想情况下会像 process.exit() 一样。

SIGTERM 是告诉进程正常终止的信号。 这是从 upstartsupervisord 等进程管理器发出的信号。

你可以从程序内部,在另一个函数中发送这个信号:

process.kill(process.pid, 'SIGTERM')

或者从另一个 Node.js 运行的程序、或者从您的系统中运行的任何其他应用程序(知道您要终止的进程的 PID)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/39220.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【点云处理】点云法向量估计及其加速(5)

在上一篇文章【点云处理】点云法向量估计及其加速(4)中我们尝试对pcl自带的KDTree的k近邻搜索过程使用OpenMP加速,效果比较明显,有将近1倍的提速。在这篇文章中我们暂时放弃pcl自带的KDTree,转而使用另一大杀器nanflann库提供的KDTree。nanof…

玩链子游戏

一 游戏描述 有一条链子,上面有 n 颗钻石,钻石编号为 1~n 。可以对该链子执行两种操作: ① CUT a b c (区间切割操作) 切下从第 a 颗钻石到第 b 颗钻石的链子,把它插在剩余链子的第 c 颗钻石…

【食品加工技术】第五章 烘烤食品加工技术 笔记

【食品加工技术】第五章 烘烤食品加工技术 笔记5.1 焙烤食品概述烘烤食品的分类按发酵和膨化程度分类安装生产工艺分类烘烤食品的原料面粉糖蛋品乳及乳制品膨松剂烘烤设备常用设备恒温设备常用工具5.2 面包加工工艺和关键技术面包的分类面包的发酵原理面包的工艺流程一次发酵二…

uboot引导应用程序

uboot默认是支持执行应用程序的,就像引导内核一样,我们也可以自己写一个应用程序,让uboot启动时引导。 在uboot examples/standalone 目录下,有hello_world.c文件,编译uboot的时候,会自动编译hello_world.…

详解 InnoDB Cluster 主机名问题

详解 InnoDB Cluster 主机名问题 文章目录详解 InnoDB Cluster 主机名问题导言测试过程结论导言 因在写 【InnoDB Cluster】修改已有集群实例名称及成员实例选项 时发现主机名这块有一些问题,在其中进行了部分测试,但为使其内容精简,故将此部…

程序员必知的三款在线绘图工具

文章目录2.draw.io3.Lucidchart4.PrcessOn5.小结正所谓“一图胜千言”,无论是商务办公、PPT 演示、学习总结、技术交流、项目开发,我们常常都需要制作一些图表、流程图、架构图来更直观地呈现内容以及归类整理知识点。 今天就来说下程序员们常用的三款在…

【矩阵论】正规方程——生成子空间

5.1 子空间 5.1.1. 定义 设 W⊂CnW\subset C^nW⊂Cn ,即子空间对线性组合封闭 若(1)对∀α,β∈W,有αβ∈W(对加法封闭)(2)对∀α∈W,∀k∈C,有kα∈W(对数乘封闭)\begin{aligned} 若 &(1)对\forall \alpha,\beta\in W,有\…

秋招失利,拿到这份“Java 高分指南(25 专题)”,金三银四翻盘有望

面试造火箭,工作拧螺丝!金九银十灰溜溜地落榜,备受打击。正当准备明年金三银四之际,意外喜提朋友赠送的这“Java 高分指南(25 专题)”:Elasticsearch、微服务、Linux、JavaOOP、集合/泛型、Mysq…

Flutter高仿微信-第57篇-添加好友

Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图: 实现代码: /*** Author : wangning* Email : maoning20080809163.c…

ThreadLocal

文章目录一、ThreadLocal是什么二、ThreadLocal作用三、ThreadLocal的设计结构早期:现在:四、ThreadLocal核心方法1. set方法2. get方法3. remove方法五、ThreadLocal内存泄漏六、使用场景七、参考资料前言: 再写博客时,遇到了如何处理保存用户的信息时出…

基于共享储能电站的工业用户 日前优化经济调度matlab程序(yalmip+cplex)(yalmip+gurobi)

基于共享储能电站的工业用户 日前优化经济调度matlab程序(yalmipcplex)(yalmipgurobi) 参考文献:基于共享储能电站的工业用户 日前优化经济调度 摘要: 文章提出一种基于共享储能电站的工业用户日前优化经济调度方法。…

nginx反向代理,负载均衡配置

文章目录一.nginx代理简介二.nginx配置简介三.nginx作为反向代理的配置四.nginx作为负载均衡的配置五.使用nginx代理的坑一.nginx代理简介 其实nginx作为代理有两种 正向代理: 隐藏客户端的信息;如科学上网 反向代理: 隐藏服务端的信息;如负载均衡 二.nginx配置…

11.26

目录 一.做题出错 1. 2.数组长度的一半 3.选择题 二.优先级队列(堆) 1.二叉树的顺序存储 1.1 存储方式 1.2下标关系 2.堆(heap) 2.1概念 2.2 操作-向下调整 三 建堆 四.优先级队列 1 概念 2 内部原理 3.操作-入队 offer() 4.操作-出队 五.计算糖果 一.做题出错…

docker如何下载国外镜像

目录背景解决方案1、创建阿里云镜像仓库2、使用https://labs.play-with-docker.com下载镜像3、将镜像上传到阿里云镜像仓库4、从阿里云镜像仓库中拉取镜像到我们linux系统中5、改变我们linux系统中拉取的镜像名称背景 今天在安装grafana和prometheus,但是在下载下面…

Java数据结构

目录 1、栈 2、队列 3、数组 4、链表 5、树 7、平衡二叉树 8、红黑树 1、栈 特点:先进后出,后进先出 数据进入栈模型的过程称为:压/进栈 数据离开栈模型的过程称为:弹/出栈 2、队列 特点:先进先出,后进后出 数据从后…

MyBatis-Plus中的更新操作(通过id更新和条件更新)

目录 前言 一、通过id更新 二、条件更新 2.1 使用QueryWrapper进行条件更新 2.2 使用UpdateWrapper进行条件更新 总结 前言 本文学习MP中的更新操作方法,带大家一起查看源码,了解更新操作的方法。学会熟练地去运用更新方法解决自己在项目中的问题…

Linus 文件处理(三)

目录 一、前言 二、扫描目录 1、opendir 2、readdir 3、telldir 4、seekdir 5、 closedir 6、A Directory-Scanning Program 三、Errors 1、strerror 2、perror 一、前言 本文将简单介绍Linux文件和目录,以及如何操作它们(如何创建文件、打开…

独家 | 使用python马尔科夫链方法建模星巴克等待时长

作者:Piero Paialunga翻译:陈超校对:和中华本文约4200字,建议阅读11分钟本文使用马尔科夫链的方法对星巴克购买咖啡的等待时长进行建模。以下内容关于如何使用马尔科夫链计算你在星巴克咖啡的等待时长。图片来自Unplash&#xff0…

Spring - ApplicationContextInitializer 扩展接口

文章目录Preorg.springframework.context.ApplicationContextInitializer扩展点扩展接口扩展生效方式方式一 : Spring SPI扩展方式二 : 配置文件方式三 :启动类手工add测试结果Pre Spring Boot - 扩展接口一览 org.springframework.context.…

详解诊断数据库ODX-C

文章目录 前言一、ODX—C作用是什么?二、ODX-C数据库在工具ODXStudio的编辑方法总结前言 ODX是全球通用的一种诊断数据库格式,相比CDD文件(Vector公司私有的一种数据库格式),应用场景和范围更广,包含了不同的子类: ODX-C\-D\-V\-E\-F\-FD 今天这篇文章仅对ODX-C做一个…