Сбой приложения nodemon - ожидание изменений файла перед запуском

РЕДАКТИРОВАТЬ После дальнейшего тестирования, я обнаружил, что это происходит с gulp и grunt в этом приложении и при установке по умолчанию mean.js. Я запускаю это локально на Mac. Когда я запускаю любое приложение, используя "node server.js", они не вылетают.

Я использую MEAN-стек с grunt-nodemon, и узел выходит из строя при обращении к экспресс-URL. Это не всегда соответствует, хотя. Иногда это работает, иногда происходит сбой узла в тот момент, когда URL-адрес удаляется без данных, а в других случаях я получаю ответ и сразу после этого происходит сбой узла.

Ответ консоли браузера:

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

Терминальный выход:

Mongoose: users.insert({ firstname: 'mike', lastname: 'jones', email:'mike@gmail.com', 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...

В этом случае запрос POST прошел, пользователь был добавлен, затем произошел сбой узла, но иногда происходит сбой до успешного завершения POST. Узел также иногда падает на запрос 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'
            }
        }
    }
};

Функция углового контроллера:

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

Экспресс-маршрут:

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

    });

};

Я также тестирую с расширением Chromes Advanced REST и при любом запросе, использующем этот инструментальный узел, немедленно вылетает.

Я новичок в MEAN, поэтому я что-то упустил здесь, что вызывает сбой? Есть идеи?

36 ответов

Это происходит из-за всех запущенных серверных процессов в фоновом режиме. Так что все, что вам нужно сделать, это остановить их от терминала.

Быстрый трюк

Убейте их всех, запустив это на терминале:

pkill -f node

и затем перезапустите nodemon.

Дайте мне знать, если это поможет, и проголосуйте, пожалуйста. Спасибо.

Для пользователей Windows перейдите в диспетчер задач, а затем найдите javascript на стороне сервера node.js и завершите задачу в процессе. затем попробуйте еще раз с вашей командой.

В терминале, используя команду ниже, чтобы убить существующий работающий порт и перезапустить службу.

killall -9 node

Иногда это происходит, когда вы забываете исходные файлы.env

Проблема: приложение упало - ожидание изменений файла перед запуском...

Причины могли быть разные:

1. Запуск узла в фоновом режиме

pkill -f node

Работал в Mac OS, в Microsoft не работал.

2.Server.js и package.json не находятся в одной папке. Проверь это.

проверьте package.json

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
     "start": "nodemon Server.js"
 }

Я обновляю узел с v4.2.6 до v4.4.5, исправил проблему с установкой по умолчанию mean.js. Я буду строить оттуда.

Я не использовал MongoDB больше месяца. Таким образом, он автоматически приостановил кластер MongoDB в облаке MongoDB (атлас). Я возобновил кластер и перезапустил приложение (вместе с повторной проверкой URL-адреса подключения mongo, который был сохранен в default.json). Вот как это сработало для меня.

Скорее всего, ваш демон узла все еще работает.

ps -eaf | grep node

если это дает что-то вроде

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

тогда попробуйте:

killall node

На самом деле это может быть из-за ошибки, которая нарушает ваш проект. Прочтите синтаксическую ошибку и лучше поймите, где

  • Тогда остановите нодмон
  • Начать заново

Примечание. Уничтожение задачи node работало лучше, чем просто остановка и запуск nodemon.

Это также может быть связано с тем, что используемые вами параметры MongoClient устарели.

Например, используйтеmaxPoolSizeвместоpoolSize, использоватьwtimeoutMSвместоwtimeout.

Эта ошибка может возникнуть, когда мы передаем другие значения, а затем строку вresponse.send()если вы передадите некоторое числовое значение вresponse.send(9)затем выдает ошибку, так что вы можете пройтиresponse.send("9"),response.sendразрешать отправлять только строковые значения

Если ваш ПОРТ используется предыдущим процессом узла (задачами)

Выполните команду netstat -a -n -o | найти "8080"

И передайте открытую задачу, используя команду ниже

taskkill /F /PID "1544"

Это происходит, если у вас app.js или любая страница .js имеет проблемы с синтаксисом. Я дважды объявил переменную. Когда я исправил это, ошибка удалена. Спасибо

В моем случае у меня был неправильно настроен порт базы данных

Измените DB_PORT на 8889 в.envфайл исправил это.

Таким образом, существует вероятность неправильной конфигурации приложения, которая может привести к сбою приложения.

Мне помогло просто проверить сборку другой ветки, а затем вернуть обратно ...

Проверьте версию узла. Всегда рекомендуется использовать стабильную версию узла, а не последнюю версию, которая может создать некоторые проблемы при работе программы. Я обновил npm до конкретной версии -v14.16.7 для своего приложения, используя установку nvm / Примечание. Вы можете использовать любую версию по своему усмотрению.

nvm — менеджер версий узлов. Вы можете скачать его с: https://github.com/coreybutler/nvm-windows/release.

nvm в основном используется для контроля версий узла.

Я действительно столкнулся с проблемой, похожей на эту. Если вы используете MongoDB, убедитесь, что кластер подключен к IP-адресу. Это решило мою проблему. Попробуйте это, если другие решения вам не подходят. Хорошего дня!

Просто попробуйте изменить номер порта.

Если кто-то все еще сталкивается с этой проблемой, вы можете проверить, верен ли синтаксис и все ли параметры узла, которые вы используете, по-прежнему поддерживаются.

Например, у меня была следующая ошибка: MongoParseError: параметры poolsize, usenewurlparse не поддерживаются , поэтому я удалил эти параметры, и сервер запустился — вот решение, которое сработало для меня.

Ошибка «Сбой приложения» в основном возникает из-за синтаксических ошибок, поэтому, если вы боретесь даже после того, как все перезапустили, обязательно проверьте синтаксис вашего кода, а также версию, которую вы используете для Node.

Я столкнулся с этой проблемой при работе над приложением nexmo sms.

Чтобы исправить сбой, перейдите к app.js, Если у вас есть эти строки кода. Обычно на первых линиях...

`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');`

Просто удалите / удалите первую строку кода 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');`

и перезапустите ваше приложение, используя "nodemon"

Это сработало?

Попробуйте изменить пароль пользователя по умолчанию в mongoDB (Database Access->user). Это решило проблему для меня.

Убедитесь, что ваше системное время не назад и не выше. Сбросьте системное время, чтобы он мог подключиться к серверу мангуста, если вы используете онлайн-базу данных.

Это может случиться с неверными путями.

Пример: если ваш nodemon server.js путь находится в D:\Ex-Track\mern-exercise но если вы не использовали полный путь D:\Ex-Track в вашем ворчании это может привести к сбою nodemon.

Обычно это происходит, когда вы вносите изменения в сервер, когда ваш сервер работает. Вместо этого, когда вы git pull вносите изменения в свой сервер. Следовательно, вам нужно убить PID запущенного сервера.

В windows вам нужно выполнить следующие команды:

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

В системе Linux / Unix вам необходимо выполнить следующие команды:

      > **lsof -i tcp:3000**
> **Kill -9 18264** 

Я думаю, что эта ошибка может быть вызвана многими причинами (если честно, это не очень описательная ошибка), в моем случае это было из-за того, что у модуля "html-pdf" были конфликты, я удалил его, и теперь ошибка исчезла !.

здесь новичок кодирования .. Я получил эту ошибку .. не повезло, пытаясь завершить задачу для серверной части node.js (она просто не прекращала работу ИЛИ, возможно, ошибка пользователя:P). Я просто выключил все и перезапустил свой компьютер, и это сработало:P

      "scripts": {
   "start": "nodemon script.js"
}

Здесь после nodemon напишите имя файла, который вы хотите запустить, как я написал script.js в package.json.

Надеюсь, это вам поможет ».

Более простой способ убить службы node.js в Windows - просто запустить эту команду в командной строке.

      taskkill /im node.exe /F

Это просто потому, что у вас неправильный пароль в конфигурации для mongoURI, где ваше имя пользователя равно единице, но пароль неверен. Просто найдите правильный пароль для созданного кластера, а затем сохраните его, чтобы он работал для стека MERN.

Другие вопросы по тегам