Node.js从基础到高级运用】二十三、Node.js中自动重启服务器

news2024/10/5 18:30:55

引言

在Node.js开发过程中,我们经常需要修改代码后重启服务器来应用这些更改。手动重启不仅效率低下,而且会打断开发流程。幸运的是,有一些工具可以帮助我们自动化这个过程。本文将介绍如何使用nodemon来实现Node.js服务器的自动重启。

什么是nodemon?

nodemon是一个用于Node.js应用程序的实用工具,它会监视项目中的文件变化。当检测到文件变化时,nodemon会自动重启你的Node.js应用程序。这对于开发过程非常有用,因为它可以节省时间并提高效率。

如何安装nodemon?

首先,你需要在全局安装nodemon,这样你就可以在任何Node.js项目中使用它。打开终端并运行以下命令:

npm install -g nodemon

使用nodemon自动重启服务器

假设你已经有一个简单的Node.js服务器,如下所示:

// server.js
const express = require('express');
const app = express();

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

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}`);
});

要使用nodemon来启动这个服务器并在文件更改时自动重启,你只需在终端中运行以下命令:

nodemon server.js

现在,每当你更改server.js文件或项目中的任何文件时,nodemon都会自动重启服务器。

配置nodemon

你可以通过创建一个名为nodemon.json的配置文件来自定义nodemon的行为。例如:

// nodemon.json
{
    "ignore": ["*.test.js", "node_modules/"],
    "watch": ["src/"],
    "ext": "js,json",
    "exec": "node server.js"
}
  • ignore: 指定nodemon应该忽略的文件或目录。
  • watch: 指定nodemon应该监视的目录。
  • ext: 指定nodemon应该监视的文件扩展名。
  • exec: 指定启动应用程序的命令。

结合使用nodemon和环境变量

如果你的应用程序依赖于环境变量,你可以在启动nodemon时设置它们。例如:
在Windows命令行(cmd)或PowerShell中,你应该使用不同的命令来设置环境变量。

对于Windows命令行(cmd),你可以使用以下语法:

set PORT=8000 && nodemon server.js

对于Windows PowerShell,你可以使用以下语法:

$env:PORT=8000; nodemon server.js

这样就可以在Windows环境中设置环境变量并运行nodemon了。注意,在Windows PowerShell中,变量赋值后面的分号是必须的,它用来分隔两个命令。而在cmd中,我们使用&&来连接两个命令。

这将设置PORT环境变量为8000,并启动server.js

进阶示例

使用 nodemon Express 结合进阶功能如中间件、路由处理以及环境变量的示例:

// server.js
const express = require('express');
const morgan = require('morgan');  // 引入日志中间件
const app = express();

// 使用morgan中间件来记录每个请求的详细信息
app.use(morgan('dev'));

// 基础路由
app.get('/', (req, res) => {
    res.send('Welcome to the Home Page!');
});

// 动态路由,用于捕捉用户ID
app.get('/user/:id', (req, res) => {
    res.send(`User ID: ${req.params.id}`);
});

// 环境变量中读取端口号
const PORT = process.env.PORT || 3000;

app.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}`);
});

// 使用nodemon自定义配置,可以在nodemon.json中设置

在终端运行服务器时,可以使用以下命令来指定环境变量,并运行server.js

$env:PORT=5000; nodemon server.js

这个示例中,我们添加了morgan中间件来自动记录请求日志,方便开发和调试过程中追踪问题。同时,展示了如何处理动态路由,以及如何从环境变量读取配置信息,这对于构建可扩展和易于维护的应用程序至关重要。
在这里插入图片描述

总结

使用nodemon可以显著提高Node.js开发的效率,它可以监听文件变化并自动重启服务器。通过简单的安装和配置,你可以节省大量的时间,并专注于代码的编写而不是重复的重启过程。

希望这篇文章能帮助你更高效地开发Node.js应用程序。如果你有任何问题或建议,请在评论区留言。

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

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

相关文章

清楚明了的凸松弛最优潮流!基于混合整数二阶锥规划的主动配电网最优潮流研究程序代码!

前言 最优潮流(optimal power flow,OPF)问题,是电力系统中最常见、最基础的一类优化问题。在满足基尔霍夫定律、线路容量约束以及运行安全约束等电力网络物理约束的前提下,OPF问题旨在寻找一个最优的潮流稳态工作点,使得在该工作…

【LAMMPS学习】八、基础知识(2.5)恒压器

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

WebSocket一篇讲清楚

文章目录 WebSocket简介WebSocket与HTTP的区别WebSocket的工作原理WebSocket的应用场景WebSocket的使用WebSocket 属性WebSocket 事件WebSocket 方法 WebSocket的心跳机制WebSocket 的安全性和跨域问题如何处理?有哪些好用的客户端WebSocket第三方库总结 WebSocket简…

代码随想录图论

1. 所有可能的路径 class Solution:def allPathsSourceTarget(self, graph: List[List[int]]) -> List[List[int]]:def dfs(graph, result, path, root): #result 返回结果, path记录路径, root记录遍历到了第几个节点if root len(graph) - 1: #如果遍历到最后…

C#Winform使用扩展方法自定义富文本框(RichTextBox)字体颜色

实现效果 调用方法 rtxtLog.AppendTextColorful(richTextBox1,DateTime.Now.ToString(), Color.Red); 完整代码如下 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using Sys…

Java 基于微信小程序的汽车4S店客户管理小程序,附源码

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

SpringCloud框架 服务拆分和远程调用

数据库隔离避免耦合度过高,不同模块将自己的业务暴露为接口,供其他微服务调用 微服务远程调用技术Rest 在后端实现发送http请求 1.在启动类/配置类里注册RestTemplate启动对象 2.注入Bean对象使用

【力扣】17.04.消失的数字

这道题的题目意思就是从0-n中的数字中找出缺失的那一个,n是数组的长度,因此我的想法就是先将数组进行排序,往sort()里面一扔,完了以后看前一个与后一个之差中哪个不是等于1的,就求出来即可。 法…

去除pycharm运行pytest的默认参数--no-header --no-summary -q

进入pycharm设置(Settings),找到高级设置(Advanced Settings)—>Python–>Pytest:不添加"–no-header --no-summary -q"(Pytest:do not add “–no-header --no-summary -q”)

R语言计算:t分布及t检验

t分布理论基础 t分布也称Student’s t-distribution,主要出现在小样本统计推断中,特别是当样本量较小且总体标准差未知时,用于估计正态分布的均值。其定义基于正态分布和 X 2 X^{2} X2分布(卡方分布)。如果随机变量X服…

pytorch-多分类实战之手写数字识别

目录 1. 网络设计2. 代码实现2.1 网络代码2.2 train 3. 完整代码 1. 网络设计 输入是手写数字图片28x28,输出是10个分类0~9,有两个隐藏层,如下图所示: 2. 代码实现 2.1 网络代码 第一层将784降维到200,第二次使用…

Linux的学习之路:7、yum与git

摘要 本章主要是说一下yum和git的操作 目录 摘要 一、什么是yum 二、yum三板斧 1、list 2、install 3、remove 三、怎么创建仓库 四、git三板斧 1、add 2、commit 3、push 4、pull 五、思维导图 一、什么是yum YUM是Yellowdog Updater Modified的简称&#xf…

三方库移植之NAPI开发(三)通过IDE开发NAPI工程

在三方库移植之NAPI开发[1]—Hello OpenHarmony NAPI一文中,笔者开发的是一个rom包的napi工程。该工程需要编译烧录固件,C 的动态库会集成到开发板的ROM中。在本篇文章中,笔者使用三方库移植之NAPI开发[1]—Hello OpenHarmony NAPI中一样的he…

zabbix监控配置(添加主机、主机组和添加监控项等)

zabbix监控配置 文章目录 zabbix监控配置1.添加主机组2.添加主机(linux)3.添加主机(windows)4.监控项配置(通过模板添加)5.监控项配置(手动添加) 1.添加主机组 2.添加主机&#xff0…

【Github】PwGen用户友好的Web应用密码生成器

弱密码问题一直是网络安全领域的一个重大挑战。许多人为了方便记忆,倾向于使用简单、常见的密码,如“123456”、“password”或者他们的生日等,这些密码很容易被猜测或通过暴力破解方法攻破。弱密码的使用大大增加了账户被黑客入侵的风险&…

【深入解析spring cloud gateway】13 Reactive Feign的使用

问题引入 在gateway中如果使用feignClient的话,会报如下错误 java.lang.IllegalStateException: block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-nio-3at reactor.core.publisher.BlockingSingleSubscriber.bloc…

C++实现一个自定义字符串类(string)

本博客将详细介绍如何在C中实现一个自定义的字符串类 string,这个类模仿了标准库中 std::string 的关键功能。这个过程将涵盖从声明到定义的每一步,重点介绍内存管理、操作符重载以及提供一些关键的实现细节。 首先:我们采用函数的声明与定义…

python--字符串对象和

1、找出10000以内能被5或6整除,但不能被两者同时整除的数(函数) def Divisible_by_5_6(x:int)->list:arr[]for i in range(1,x1):if (i % 5 0 or i % 6 0 ):if i % 5 0 and i % 6 0:continue #利用continue跳过能被5和6整除的数else:a…

Spring Boot 学习(4)——开发环境升级与项目 jdk 升级

各种版本都比较老,用起来也是常出各样的问题,终于找到一个看来不错的新教程,是原先那个教程的升级。遂决定升级一下开发环境,在升级遇到一些问题,摸索将其解决,得些体会记录备查。 最终确定开发环境约束如下…

ActiveMQ 01 消息中间件jmsMQ

消息中间件之ActiveMQ 01 什么是JMS MQ 全称:Java MessageService 中文:Java 消息服务。 JMS 是 Java 的一套 API 标准,最初的目的是为了使应用程序能够访问现有的 MOM 系 统(MOM 是 MessageOriented Middleware 的英文缩写&am…