Nodejs express 4 如何自动重启?

Nodejs express 4 如何自动重启?

express 4以前的版本都是通过 npm app.js来运行环境,但是4.0的却用了npm start来代替,导致很多自动重启插件都无法使用,请问各位大神有没有可代替的方法?

11 回复

Nodejs express 4 如何自动重启?

在Express 4及更高版本中,启动应用的方式发生了变化,通常使用 npm start 而不是 npm run app.js。这导致了一些自动重启工具无法直接工作。不过,有几种方法可以实现自动重启功能,特别是在开发环境中。

使用 nodemon

nodemon 是一个非常方便的工具,它可以监视文件的变化并自动重启Node.js应用。安装 nodemon 非常简单:

npm install nodemon --save-dev

安装完成后,你可以在 package.json 文件中修改 start 脚本,使其使用 nodemon 启动应用:

{
  "scripts": {
    "start": "nodemon ./bin/www"
  }
}

这里假设你的入口文件是 bin/www。如果你使用的是 app.js 或其他文件,只需相应地更改路径即可。

示例代码

假设你的项目结构如下:

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

bin/www 文件内容如下:

#!/usr/bin/env node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('my-express-app:server');
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);
}

这样配置后,你可以通过运行以下命令启动应用,并且在文件发生变化时自动重启:

npm start

通过这种方式,你可以轻松地在开发过程中自动重启你的Express应用。


。。。。

你试试npm app.js再说吧

…没试过会问嘛我~~~~

在app.js里面添加,app.listen(3000);然后使用supervisor app.js,当然你的npm install -g supervisor了

刚接触Express,以前写EmberJS用过Grunt的Watch功能,现在也写了一个Grunt的Watch来自动重启Express

node ./bin/www其实就是node app.js

我一般用node-dev,有修改就restart,支持coffee

也可以省略文件后缀名

同8楼,开发的时候用node-dev 灰常好用。

要实现 Node.js 和 Express 4 应用程序的自动重启,可以使用 nodemon 工具。nodemon 是一个非常方便的工具,它可以在文件发生变化时自动重启 Node.js 应用程序。以下是如何配置和使用 nodemon 的步骤:

  1. 安装 nodemon: 首先需要全局安装或局部安装 nodemon。推荐局部安装以便于项目管理。

    # 全局安装
    npm install -g nodemon
    
    # 局部安装
    npm install --save-dev nodemon
    
  2. 修改启动脚本: 如果使用 nodemon 进行本地安装,则可以在 package.json 中添加一个启动脚本,例如:

    {
      "scripts": {
        "start": "node app.js",
        "dev": "nodemon app.js"
      }
    }
    

    然后可以使用 npm run dev 命令来启动应用程序,这样当文件发生变化时,nodemon 会自动重启应用。

  3. 运行应用: 使用命令 npm run dev 启动应用。现在当你对代码进行更改时,nodemon 会检测到这些变化并自动重启你的应用。

示例代码

假设有一个简单的 Express 应用程序 app.js

// app.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}`);
});

package.json 文件中添加启动脚本:

{
  "name": "example-app",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "start": "node app.js",
    "dev": "nodemon app.js"
  },
  "dependencies": {
    "express": "^4.17.1"
  },
  "devDependencies": {
    "nodemon": "^2.0.15"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

然后运行:

npm run dev

以上就是如何使用 nodemon 实现 Node.js 和 Express 4 应用的自动重启。

回到顶部