在 Express 4 里 Nodejs Supervisor 如何使用?

在 Express 4 里 Nodejs Supervisor 如何使用?

在 Express 4 版本里启动 app 的方法也变了:DEBUG=my-application ./bin/www,好像修改 Jade 能够实时更新,更改 JS 的就不能,实时更新显示。Supervisor 改如何用了?

9 回复

在 Express 4 里 Node.js Supervisor 如何使用?

在 Express 4 中,启动应用的方式有所变化,通常我们会通过 DEBUG 环境变量来启用调试模式。例如:

DEBUG=my-application ./bin/www

如果你想要在修改 JavaScript 文件时实现自动重启服务,可以使用 supervisor 这个工具。supervisor 是一个简单的 Node.js 工具,用于监控文件系统的变化并自动重启 Node.js 应用程序。

安装 Supervisor

首先,你需要全局安装 supervisor。你可以使用以下命令进行安装:

npm install -g supervisor

使用 Supervisor 启动应用

安装完成后,你可以使用 supervisor 来启动你的 Express 应用。假设你的入口文件是 bin/www,你可以使用以下命令:

supervisor bin/www

这将启动你的 Express 应用,并且会监听任何文件系统的变更。如果检测到文件变化(包括 .js 文件),它会自动重启应用程序。

示例

假设你的项目结构如下:

my-application/
├── node_modules/
├── bin/
│   └── www
├── package.json
└── app.js

bin/www 文件可能包含类似如下的代码:

#!/usr/bin/env node

/**
 * Module dependencies.
 */
var app = require('../app');
var debug = require('debug')('my-application');
var http = require('http');

/**
 * Get port from environment and store in Express.
 */

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
 * Normalize a port into a number, string, or false.
 */

function normalizePort(val) {
  var port = parseInt(val, 10);

  if (isNaN(port)) {
    // named pipe
    return val;
  }

  if (port >= 0) {
    // port number
    return port;
  }

  return false;
}

/**
 * Event listener for HTTP server "error" event.
 */

function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  var bind = typeof port === 'string'
    ? 'Pipe ' + port
    : 'Port ' + port;

  // handle specific listen errors with friendly messages
  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}

/**
 * Event listener for HTTP server "listening" event.
 */

function onListening() {
  var addr = server.address();
  var bind = typeof addr === 'string'
    ? 'pipe ' + addr
    : 'port ' + addr.port;
  debug('Listening on ' + bind);
}

在这个例子中,supervisor 将会监听 bin/www 文件以及所有被引用的其他文件(如 app.js)的变化,并在检测到变化时自动重启服务器。

通过这种方式,你可以在开发过程中更高效地调试和测试你的 Express 应用。


大小写给楼主改掉了… Jade 应该是每次请求都会读代码?.. JS 是应用启动时候就加载进去的没可以用 node-dev 来自动刷新 app. Supervisor 是什么? 后端应该管理工具 Supervisor 还是 Isaacs 的 supervisor 模块?

你好,我是想说supervisor,搞错大小写了,express 3 的时候使用supervisor app.js ,这样每次更改代码都不用重启服务了吗?

supervisor ./bin/www

ok,之前这样子试过,因为不像以前的提示。直到访问地址才回像往常一样在控制台有输出。谢谢!

这样确实可以,谢谢! PS: cnodejs.org 无法很快看出哪个是楼主回的,一顿好找。

在window环境下Express 4不是内部命令,3.5就可以,为什么啊

在 Express 4 中使用 Supervisor 来实现热重载(即更改 JavaScript 文件后自动重启服务)可以极大地提升开发效率。下面将简要介绍如何配置和使用 Supervisor,并提供相应的示例代码。

安装 Supervisor

首先,确保已经安装了 Supervisor。如果尚未安装,可以通过 npm 全局安装:

npm install -g supervisor

使用 Supervisor 启动应用

Supervisor 可以用来监视你的应用程序,并在任何文件发生变化时自动重启服务器。使用它来启动 Express 应用程序,只需在命令行中替换 nodesupervisor

假设你的主入口文件名为 app.js 或者如题目所述的 bin/www,你可以这样启动应用:

supervisor bin/www

这里,bin/www 是 Express 4 默认的启动脚本。

示例目录结构

为了更好地理解,这里提供一个简单的项目结构示例:

my-app/
├── bin/
│   └── www
├── package.json
└── app.js

修改 Supervisor 配置

Supervisor 提供了一些选项来定制行为。例如,如果你想要更详细的日志输出,可以使用 -i 选项来指定忽略的文件模式,或者使用 -w 来指定哪些文件应该被监视:

supervisor -w 'bin/**,app.js' -i node_modules bin/www

上述命令表示监视 bin 目录下的所有文件以及 app.js,并且不监视 node_modules 目录。

总结

通过使用 Supervisor,你可以轻松地实现 Node.js 应用的热重载功能,从而提高开发效率。只需要全局安装 Supervisor 并用其替代 node 命令来启动你的 Express 应用即可。根据需要调整 Supervisor 的参数以满足特定需求。

回到顶部