menu

Entrypoint

The entrypoint.js lets you precisely contol your application flow and organize the link between the Node.js runtime and PM2.

Entrypoint base class

The entrypoint has 4 methods; onStart, onStop, sensors and actuators. Here is an example of this class:

const Entrypoint = require('@pm2/io').Entrypoint

new class App extends Entrypoint {
  // This is the very first method called on startup
  onStart (cb) {

    // Returning the callback will tell PM2 that the app is ready to process queries
    return cb()
  }

  // This is the very last method called on exit || uncaught exception
  onStop(err, cb, code, signal) {
  }

  // Here we declare some process metrics
  sensors () {
  }

  // Here are some actions to interact with the app in live
  actuators () {
  }
}

Example

Here is a concrete example for a simple Hello world http api:

const io = require('@pm2/io')
const app = require('express')()

new class MyApp extends io.Entrypoint {
  // This is the very first method called on startup
  onStart (cb) {
    const http = require('http').Server(app)

    app.get('/', (req, res) => {
      this.reqMeter.mark()
      res.send('Hello From Entrypoint.js')
    });

    this.server = app.listen(cb)
  }

  // This is the very last method called on exit || uncaught exception
  onStop (err, cb, code, signal) {
    console.log(`App has exited with code ${code}`)
  }

  // Here we declare some process metrics
  sensors () {
    this.reqMeter = this.io.meter('req/min')
  }

  // Here are some actions to interact with the app in live
  actuators () {
    this.io.action('getEnv', (reply) => {
      reply({ server: this.server })
    })
  }
}

Then to start it just run:

pm2 start entrypoint.js

Roadmap

We plan to implement ecosystem file configuration straight into this entrypoint.js file, if you have any remarks, ideas or feedback feel free to post an issue