Сбой приложения 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
Проблема: приложение упало - ожидание изменений файла перед запуском...
Причины могли быть разные:
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
разрешать отправлять только строковые значения
Это происходит, если у вас 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.