nodemon application s'est écrasé en attente pour les modifications de fichiers avant de commencer

MODIFIER
Après d'autres tests, j'ai trouvé que ce qui se passe avec les deux gorgée et grunt sur cette application et sur l'installation par défaut de mean.js. Je suis en cours d'exécution au niveau local sur un Mac. Quand je marche, soit de l'app à l'aide de "nœud server.js" ils ne tombe pas en panne.

Je suis en utilisant un MOYEN de pile avec grunt-nodemon et le nœud de l'écraser lorsqu'une express URL est accessible. Il n'est pas toujours cohérente. Parfois cela fonctionne, parfois nœud accidents de droit lorsque l'URL est frappé à la retraite pas de données, et d'autres fois, j'obtiens une réponse et un nœud s'est écrasé immédiatement après.

Navigateur de la console de réponse:

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

Terminal de sortie:

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...

Dans ce cas, la requête POST est passé par, l'utilisateur a été ajouté, puis le nœud s'est écrasé, mais parfois il se bloque avant un POST. Nœud également à l'occasion des accidents de la requête GET.

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'
}
}
}
};

Angulaire de la fonction de contrôleur:

  $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 la 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
});
}
});
});
};

Je suis également en train de tester avec les Chromes Avancé RESTE extension et à toute demande l'aide de cet outil nœud se bloque immédiatement.

Je suis de nouveau à DIRE si j'ai loupé quelque chose ici qui est à l'origine de l'accident? Des idées?

Essayez de lancer votre serveur manuellement et voir si des erreurs sont imprimées avant de planter: node server.js
Exécutant manuellement semble résoudre le problème, merci. Est-ce à dire que j'ai un problème ou une mauvaise configuration avec Grunt?
Pas vraiment. J'ai supposé qu'en l'exécutant autonome, vous obtiendrez de voir pourquoi il se bloque. Il n'était pas censé travailler mieux comme ça ;D
Ajouté le plein gruntfile.js, default.js et dev.js qui sont utilisés et la cause de l'erreur. En espérant que les aide en quelque sorte.
Maintenant les tests avec node --debug server.js je reçois le message d'erreur Segmentation fault: 11 et le nœud se bloque. Mais si je n'utilise pas --debug il n'y a pas d'accident et pas de message d'erreur

OriginalL'auteur MTD | 2016-05-27