javascriptnode.jsheroku

Heroku Node.js app "Process exited with status 1" and error h10


I deployed my app to heroku fine with no problems. I was able to run heroku local web on localhost:5000 and it worked. When I went to the web dyno address, it said application error. I checked the logs for the site and it said:

 2017-05-01T02:52:30.980217+00:00 app[web.1]:     at Connection.<anonymous> (/app/node_modules/mongodb-core/lib/connection/pool.js:274:12)
 2017-05-01T02:52:30.980218+00:00 app[web.1]:     at emitTwo (events.js:106:13)
 2017-05-01T02:52:30.980218+00:00 app[web.1]:     at Socket.<anonymous> (/app/node_modules/mongodb-core/lib/connection/connection.js:177:49)
 2017-05-01T02:52:30.980218+00:00 app[web.1]:     at Connection.emit (events.js:191:7)
 2017-05-01T02:52:30.980219+00:00 app[web.1]:     at emitOne (events.js:96:13)
 2017-05-01T02:52:30.980220+00:00 app[web.1]:     at Socket.emit (events.js:188:7)
 2017-05-01T02:52:30.980221+00:00 app[web.1]:     at process._tickCallback (internal/process/next_tick.js:104:9)
 2017-05-01T02:52:31.040828+00:00 heroku[web.1]: State changed from starting to crashed
 2017-05-01T02:52:31.029211+00:00 heroku[web.1]: Process exited with status 1
 2017-05-01T02:52:40.638415+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=room111-thoughts.herokuapp.com request_id=91b591cf-3d8d-4d94-8caf-7b1b868b088b fwd="108.221.62.78" dyno= connect= service= status=503 bytes= protocol=https
 2017-05-01T02:52:41.600924+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=room111-thoughts.herokuapp.com request_id=c8f6c2d3-dc38-4e65-9a20-581910f42b36 fwd="108.221.62.78" dyno= connect= service= status=503 bytes= protocol=https

I am using node.js and server.js (the initializing script) is as follows

// load environment variables
require('dotenv').config();

// grab our dependencies
const express    = require('express'),
  app            = express(),
  port           = process.env.PORT || 8080,
  expressLayouts = require('express-ejs-layouts'),
  mongoose       = require('mongoose'),
  bodyParser     = require('body-parser'),
  session        = require('express-session'),
  cookieParser   = require('cookie-parser'),
  flash          = require('connect-flash'),
  expressValidator = require('express-validator');

// configure our application ===================
// set sessions and cookie parser
app.use(cookieParser());
app.use(session({
  secret: process.env.SECRET, 
  cookie: { maxAge: 60000 },
  resave: false,    // forces the session to be saved back to the store
  saveUninitialized: false  // dont save unmodified
}));
app.use(flash());

// tell express where to look for static assets
app.use(express.static(__dirname + '/public'));

// set ejs as our templating engine
app.set('view engine', 'ejs');
app.use(expressLayouts);

// connect to our database
mongoose.connect(process.env.DB_URI);

// use body parser to grab info from a form
app.use(bodyParser.urlencoded({ extended: true }));
app.use(expressValidator());

// set the routes =============================
app.use(require('./app/routes'));

// start our server ===========================
app.listen(port, () => {
  console.log(`App listening on http://localhost:${port}`);
});

I don't have any idea what is happening, especially because it worked fine on localhost and deployment. Any help is appreciated.


Solution

  • Check the environment variable DB_URI by calling heroku config and seeing what is listed for it. The error indicates that your connection is being refused, so my guess is that there is no mongo db configured or that the environment variable isn't set in the heroku app context.