Reputation: 709
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?
Upvotes: 67
Views: 465973
Reputation: 131
Avoid using special characters in the database user password. I encountered an error due to unescaped characters
, but the issue was resolved once I updated the password without them.
Upvotes: 0
Reputation: 73
verify mongo installation using mongo
or mongosh
in you command.
Upvotes: -1
Reputation: 1176
That works for me:
[nodemon] app crashed - waiting for file changes before starting...
means you changes the file exactly at the time you save (nodemon debugger) working, try to use history to go back your changes. just that. if your changes can not be back from history do these steps:
Delete your nodemon in your ROOT node module like in this picture
MacBook-Pro:/usr/local/lib$ cd node_modules/
MacBook-Pro:/usr/local/lib/node_modules$ ls
expo-cli/ npm/ react-native-cli/
nodemon/ react-devtools/
MacBook-Pro:/usr/local/lib/node_modules$ sudo rm -R n
nodemon/ npm/
MacBook-Pro:/usr/local/lib/node_modules$ sudo rm -R nodemon/
MacBook-Pro:/usr/local/lib/node_modules$
then install nodmon again.
Upvotes: -2
Reputation: 307
I encountered this challenge when working on nexmo sms app.
To fix the crashing, go to your app.js
. If you have these lines of code. Its normally on the very first lines...
`import { Socket } from 'dgram';`
`const express = require('express');`
`const bodyParser = require('body-parser');`
`const ejs = require('ejs');`
`const Nexmo = require('nexmo');`
`const socketio = require('socket.io');`
Simply delete/remove the first line of code
import { Socket } from 'dgram';
Leaving these ones...
`const express = require('express');`
`const bodyParser = require('body-parser');`
`const ejs = require('ejs');`
`const Nexmo = require('nexmo');`
`const socketio = require('socket.io');`
and restart your application using "nodemon"
Upvotes: -2
Reputation: 131
"scripts": {
"start": "nodemon script.js"
}
Here, after nodemon
write file name which you want to run like I have written script.js
in package.json
.
Upvotes: -1
Reputation: 79
Note: Killing the node task in windows Task Manager worked fine than simply stopping and starting the nodemon.
Upvotes: 0
Reputation: 49
This error might be comes when we pass other values then string in response.send()
if you pass some numeric value in response.send(9)
then it gives error so, you can pass response.send("9")
, response.send
only allow to send string values
Upvotes: 0
Reputation: 119
In my case, I had wrong database port configured
Change DB_PORT to 8889 in .env
file fixed it.
So there is possibility of wrong app configuration, behind crashing of app.
Upvotes: 0
Reputation: 21
Check the node version. Its always recommended to use a stable node version rather going for the latest version, which may create some issues while the program. I updated the npm to the specific version -v14.16.7 for my app, by using the nvm install / Note: You can use any version as your preference.
nvm is the node version manager. You can download it from : https://github.com/coreybutler/nvm-windows/release
nvm is mainly used for the version control of the node.
Upvotes: 0
Reputation: 1
It can also be because the MongoClient options you used are the deprecated ones.
For example, use maxPoolSize
instead of poolSize
, use wtimeoutMS
instead of wtimeout
.
Upvotes: 0
Reputation: 1
This is my error: [nodemon] app crashed - waiting for file changes before starting...
My answer: Make sure that we: 1- install bcrypt:
npm install bcrypt-nodejs
2- defined bcrypt:
const bcrypt = require('bcrypt-nodejs');
Upvotes: -2
Reputation: 16
If anyone is still experiencing this problem, you may want to check if the syntax is correct and all node options you're using are still supported.
For instance, I've had the following mistake: MongoParseError: options poolsize, usenewurlparse are not supported so I removed these parameters and the server runned - here's the solution that worked for me
The "App crashed" error mainly occurs because of syntax errors, so if you're struggling even after you restarted everything, make sure to check the syntax of your code as well as the version you're using for Node.
Upvotes: 0
Reputation: 1139
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.
Upvotes: 98
Reputation: 21
Easier way to kill node.js services on Windows is simply to run this command in command prompt
taskkill /im node.exe /F
Upvotes: -1
Reputation: 29
I haven't used MongoDB
for more than a month. So it automatically paused the MongoDB
cluster in the MongoDB cloud (atlas). I resumed the cluster and restart the application (along with a recheck of the mongo connection URL which was saved in default.json).
This is how it worked for me.
Upvotes: 2
Reputation: 11
This usually happens when you make changes to the server, while your server is running. For instead when you git pull to make changes to your server. Therefore, you need to kill the PID of the server that is running.
On windows you need to run the following commands:
> **netstat -ano|findstr "PID :3000"** // Replace 3000 with the port number
> **taskkill /pid 18264 /f** // Replace the 18264 with the pid number you received by running the first command
On Linux/Unix system you need to run the following commands:
> **lsof -i tcp:3000**
> **Kill -9 18264**
Upvotes: -1
Reputation: 59
In case your PORT is used by previous node process(tasks)
Run command netstat -a -n -o | find "8080"
And pass opened task using below command
taskkill /F /PID "1544"
Upvotes: 0
Reputation: 189
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.
Upvotes: 17
Reputation: 405
In the terminal using the below command to kill the existing running port and restart your service.
killall -9 node
or to kill a particular port instead of all
sudo lsof -i :3000 //replace 3000 with your port number
sudo kill -9 31363 // replace 31363 with your PID
Upvotes: 11
Reputation: 539
Issue : app crashed - waiting for file changes before starting...
There could be different reasons:
1. Running node in background
pkill -f node
Worked in Mac OS ,did not work in Microsoft.
2.Server.js and package.json are not in same folder . Check it .
check package.json
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "nodemon Server.js"
}
Upvotes: 6
Reputation: 173
Sometimes it happenes when you forget to source your .env files
Upvotes: 8
Reputation: 7
This can happen with incorrect paths.
Example: If your nodemon server.js
path is in D:\Ex-Track\mern-exercise
but If you are didn't use the full path D:\Ex-Track
in your grunt, this can cause nodemon to fail.
Upvotes: -2
Reputation: 639
Most likely your node daemon is still running.
ps -eaf | grep node
if it gives something like
abhinav 15759 15748 0 19:30 pts/2 00:00:00 sh -c nodemon server.js
abhinav 15760 15759 0 19:30 pts/2 00:00:00 node /home/abhinav/Documents/Projects/WebD/Node/smartbrain/smart-brain-api/node_modules/.bin/nodemon server.js
abhinav 15812 15801 0 19:31 pts/2 00:00:00 sh -c nodemon server.js
then try:
killall node
Upvotes: 2
Reputation: 709
I update node from v4.2.6 to v4.4.5 fixed the issue with the default mean.js install. I'll build out from there.
Upvotes: 3