写了个比较轻量的重启Nodejs服务器的脚本

写了个比较轻量的重启Nodejs服务器的脚本

写了个比较轻量的重启node服务器的脚本,在开发中我觉得还是用的着的,有兴趣的戳这里https://github.com/devqin/rserver

求吐槽. star一下

6 回复

当然可以!以下是一个简洁的示例,展示如何编写一个轻量级的脚本来重启Node.js服务器。假设你已经在GitHub上创建了一个项目,并且项目的名称为 rserver

标题:

写了个比较轻量的重启Nodejs服务器的脚本

内容:

# 轻量级Node.js服务器重启脚本

在开发过程中,有时候需要频繁重启Node.js服务器以应用新的更改。我编写了一个简单的脚本来帮助完成这个任务,希望对大家有所帮助。

#### 使用方法

1. 克隆项目到本地:
   ```bash
   git clone https://github.com/yourusername/rserver.git
   cd rserver
  1. 安装依赖:

    npm install
    
  2. 运行脚本:

    node restartServer.js
    

示例代码

restartServer.js 文件内容如下:

const { exec } = require('child_process');

function restartServer() {
    console.log('Stopping the server...');
    exec('kill -SIGINT $(lsof -ti:3000)', (error) => {
        if (error) {
            console.error(`Error stopping the server: ${error}`);
            return;
        }
        console.log('Server stopped.');
        console.log('Starting the server...');
        exec('node app.js', (error) => {
            if (error) {
                console.error(`Error starting the server: ${error}`);
                return;
            }
            console.log('Server started.');
        });
    });
}

// 监听文件变化
const fs = require('fs');
const path = require('path');
const chokidar = require('chokidar');

const watcher = chokidar.watch('.', {
    ignored: /(^|[\/\\])\../, // 忽略隐藏文件
    persistent: true,
});

watcher.on('all', () => {
    console.log('File changes detected. Restarting server...');
    restartServer();
});

console.log('Watching for file changes...');

解释

  1. 停止服务器:使用 kill -SIGINT 命令来优雅地关闭正在运行的Node.js服务器(假设你的服务器运行在端口3000上)。
  2. 启动服务器:重新启动Node.js应用。
  3. 监听文件变化:使用 chokidar 库来监听文件的变化,一旦检测到文件变化,就调用 restartServer() 函数来重启服务器。

注意事项

  • 确保你的Node.js应用已经正确配置并能够通过命令 node app.js 启动。
  • 如果你的服务器运行在不同的端口上,请修改 exec('kill -SIGINT $(lsof -ti:3000)') 中的端口号。
  • 请确保你有足够的权限来执行 kill 命令。

如果觉得这个脚本有用,欢迎给我的项目点个Star!


希望这个示例对你有帮助!如果你有任何问题或建议,欢迎在评论区留言交流。

恩,写的不错,学习了。我是这样的:

#####supervisor E:\nodespace\app.js

然后保存为批处理文件。这样也是不错的选择。:)

就是得安装个supervisor.

想想其实也没有那么麻烦,一个监听,一个重启子进程,就索性写了一个轻量的,加个脚本就ok.现在我在用,觉得挺方便的,不过还有很多问题…欢迎试用,有问题欢迎反馈哦.

怎么404了呢? 我觉得这个想法挺好的。

supervisor现在老是无数次重复启动。。。

跟 nodemon 提供相同的功能吗?

这个脚本的目的是为了方便在开发过程中快速重启Node.js服务器。下面是一个简单的实现示例,它包括一个基本的HTTP服务器和一个API端点来触发服务器的重启。

示例代码

const http = require('http');
const fs = require('fs');
const path = require('path');

// 创建一个简单的HTTP服务器
const server = http.createServer((req, res) => {
    if (req.url === '/restart') {
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        res.end('Restarting server...\n');
        
        // 重新启动服务器
        require('./restartServer');
    } else {
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        res.end('Hello World\n');
    }
});

server.listen(3000, () => {
    console.log('Server is running on port 3000');
});

// restartServer.js
module.exports = function() {
    console.log('Reloading the server...');
    process.exit(0); // 退出当前进程
};

解释

  1. HTTP服务器:创建了一个简单的HTTP服务器,监听3000端口。
  2. 重启逻辑:当接收到/restart请求时,返回一个消息并调用require('./restartServer')来重新加载服务器。
  3. 重启函数restartServer.js模块包含一个导出的函数,该函数会在被调用时打印一条消息,并使用process.exit(0)来退出当前进程,从而触发Node.js的自动重启机制。

这个脚本可以在开发环境中使用,通过发送HTTP请求来触发服务器的重启,方便开发者进行调试和测试。注意,在生产环境中使用这种方法可能需要更复杂的错误处理和日志记录机制。

回到顶部