Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

nodemon app crashed - waiting for file changes before starting

EDIT After further testing, I have found that this is happening with both gulp and grunt on this app and on the default install of mean.js. I'm running this locally on a Mac. When I running either app using "node server.js" they don't crash.

I'm using a MEAN stack with grunt-nodemon and node is crashing when an express URL is accessed. It isn't always consistent though. Sometimes it works, sometimes node crashes right when the URL is hit retiring no data, and other times I get a response and node crashed immediately after.

Browser console response:

http://localhost:8000/api/users net::ERR_CONNECTION_REFUSED 

Terminal output:

Mongoose: users.insert({ firstname: 'mike', lastname: 'jones', email:'[email protected]', role: 'admin', password: 'mike', _id: ObjectId("57485c16fc11894b96c28057"), created: new Date("Fri, 27 May 2016 14:39:18 GMT"), __v: 0 })    user.save success node crash [nodemon] app crashed - waiting for file changes before starting... 

In this case, the POST request went through, the user was added, then node crashed, but sometimes it crashes before a successful POST. Node also occasionally crashes on the GET request.

gruntfile.js:

module.exports = function(grunt) {     // Load grunt tasks automatically     require('load-grunt-tasks')(grunt);      var pkg = grunt.file.readJSON('package.json');      var options = {         paths: {             app: 'app',             assets: 'app/assets',             dist: 'app/dist',             distAssets: 'app/dist/assets',             html: 'app/html',             htmlTmp: '.tmp/htmlsnapshot',             htmlAssets: 'app/html/assets',             index: 'app/dist/index.html',             indexDev: 'app/index.html',             indexTmp: '.tmp/html/index.html'         },         pkg: pkg,         env: {             test: {                 NODE_ENV: 'test'             },             dev: {                 NODE_ENV: 'development'             },             prod: {                 NODE_ENV: 'production'             }         }     };      // Load grunt configurations automatically     var configs = require('load-grunt-configs')(grunt, options);      // Define the configuration for all the tasks     grunt.initConfig(configs);      // Connect to the MongoDB instance and load the models     grunt.task.registerTask('mongoose', 'Task that connects to the MongoDB instance and loads the application models.', function () {         // Get the callback         var done = this.async();          // Use mongoose configuration         var mongoose = require('./config/lib/mongoose.js');          // Connect to database         mongoose.connect(function (db) {             done();         });     });      grunt.registerTask('bumper', ['bump-only']);     grunt.registerTask('css', ['sass']);     grunt.registerTask('default', [         'sass',         'copy:dev',         'nodemon',         'concurrent:dev',         'watch',         'mongoose'     ]);      grunt.registerTask('shared', [         'clean:demo',         'copy:demo',         'sass',         'ngconstant',         'useminPrepare',         'concat:generated',         'cssmin:generated',         'uglify:generated',         'filerev',         'usemin',         'imagemin',         'usebanner'     ]);      grunt.registerTask('demo', [         'shared',         'copy:postusemin',         'grep:demo'     ]);      grunt.registerTask('dist', [         'shared',         'copy:postusemin',         'copy:dist',         'grep:dist',         'compress',         'copy:postusemin',         'grep:demo',     ]);      grunt.loadNpmTasks('grunt-forever');  }; 

default.js

module.exports.tasks = {     // version update     bump: {         options: {             files: ['package.json', 'bower.json'],             pushTo: 'origin'         }     },      // application constants     ngconstant: {         options: {             dest: '<%= paths.assets %>/js/app.constants.js',             name: 'app.constants',         }     },      // remove all bs from css     cssmin: {         options: {             keepSpecialComments: 0         }     },     markdown: {         all: {             files: [                 {                     src: 'README.md',                     dest: '<%= paths.assets %>/tpl/documentation.html'                 }             ],             options: {                 template: '<%= paths.assets %>/tpl/_documentation_template.html',             }         }     } }; 

dev.js:

var _ = require('lodash'), defaultAssets = require('./assets/default'), testAssets = require('./assets/test'), testConfig = require('./env/test'), fs = require('fs'), path = require('path');  module.exports.tasks = {     // copy files to correct folders     copy: {         dev: {             files: [                 { expand: true, src: '**', cwd: '<%= paths.app %>/bower_components/font-awesome/fonts',                    dest: '<%= paths.assets %>/fonts' },                 { expand: true, src: '**', cwd: '<%= paths.app %>/bower_components/material-design-iconic-font/fonts',     dest: '<%= paths.assets %>/fonts' },                 { expand: true, src: '**', cwd: '<%= paths.app %>/bower_components/roboto-fontface/fonts',                 dest: '<%= paths.assets %>/fonts' },                 { expand: true, src: '**', cwd: '<%= paths.app %>/bower_components/weather-icons/font',                    dest: '<%= paths.assets %>/fonts' },                 { expand: true, src: '**', cwd: '<%= paths.app %>/bower_components/bootstrap-sass/assets/fonts/bootstrap', dest: '<%= paths.assets %>/fonts' }             ]         }     },      // watch for changes during development     watch: {         js: {             files: ['Gruntfile.js', '<%= paths.assets %>/js/**/*.js'],             tasks: ['jshint'],             options: {                 livereload: true             }         },         css: {             files: [                 '<%= paths.assets %>/css/**/*.scss'             ],             tasks: ['sass'],             options: {                 livereload: true             }         },         markdown: {             files: [                 'README.md'             ],             tasks: ['markdown']         },         tasks:  [ 'express:dev' ],     },      // debug while developing     jshint: {         all: ['Gruntfile.js', '<%= paths.assets %>/js/**/*.js']     },     concurrent: {         dev: {             tasks: ['nodemon', 'node-inspector', 'watch'],             options: {                 logConcurrentOutput: true             }         }     },     nodemon: {         dev: {             script: 'server.js',             options: {                 nodeArgs: ['--debug'],                 ext: 'js,html',                 callback: function (nodemon) {                      nodemon.on('crash', function (event) {                         console.log(event);                     });                   },                 watch: _.union(defaultAssets.server.gruntConfig, defaultAssets.server.views, defaultAssets.server.allJS, defaultAssets.server.config)             }         }     },     forever: {         server1: {             options: {                 index: 'server.js',                 //logDir: 'logs'             }         }     } }; 

Angular controller function:

  $scope.addUser = function(){        var user = {           firstname: $scope.firstname,           lastname: $scope.lastname,           email: $scope.email,           role: $scope.role.selected,           password: $scope.password       };        $http.post('/api/userAdd', user ).then(function successCallback(response) {           $location.path('/users');       }, function errorCallback(response) {           console.log('error addding user');           console.log(response);       });   }; 

Express route:

User = require('../models/user.js');  module.exports = function (app) {      app.get('/api/users', function (req, res) {          User.find({}, function (err, users) {             if ( err ) {                 res.send({                     message : 'error finding users',                     success: false                 });             } else {                 res.json(users);             }         });      });      app.get('/api/users', function (req, res) {         User.find({fields: {}}, function (err, docs) {             res.json(docs);         });     });      app.post('/api/userAdd', function (req, res) {          var user = new User(req.body);          user.save( function( err, user ){              if (err){                 console.log('user.save error');                 console.log(err);                 res.send({                     success: false                 });             } else {                 console.log('user.save success');                 res.send({                     success: true                 });             }         });      });  }; 

I'm also testing with Chromes Advanced REST extension and with any request using this tool node crashes immediately.

I'm new to MEAN so am I missing something here that is causing the crash? Any ideas?

like image 271
MTD Avatar asked May 27 '16 14:05

MTD


People also ask

How do I solve the error Nodemon app crashed waiting for file changes before starting in Windows?

Reasons & Solutions: Maybe your PC running several processes in the Background. So you need to stop all the node process that are running. and then restart nodemon.

Does Nodemon restart on crash?

Nodemon monitors your source files for changes during development and reload on change. That's why it says 'waiting for file change' after a crash. In development, usually you made a mistake, correct it, save the source file, nodemon notices that and reloads.

How do I restart Nodemon?

Running non-Node code While Nodemon is running, we can manually restart our application. So instead of stopping and restarting Nodemon, we can just type rs and press enter, and Nodemon will restart the server or the running process for us.

What is the use of Nodemon?

nodemon is a tool that helps develop Node. js based applications by automatically restarting the node application when file changes in the directory are detected. nodemon does not require any additional changes to your code or method of development. nodemon is a replacement wrapper for node .


2 Answers

This is happening because of all the running server processes in the background. So all you need to do is stop them from the terminal.

Quick trick


FOR LINUX

Kill them all by running this on terminal:

pkill -f node 

And then restart nodemon.


FOR Windows

 1. Go to the task manager  2. Then look for Node.js: Server-side JavaScript  3. Then right click on it and End task from the processes.  

Then restart the server. It will work fine.

like image 61
as8297 Avatar answered Oct 17 '22 03:10

as8297


for windows users, go to the task manager and then find for node.js server-side javascript, and end task on the process. then try again with your command.

like image 42
Jasim Uddin Avatar answered Oct 17 '22 02:10

Jasim Uddin