2016-05-19 3 views
2

Я использую следующий пример для установки экспресс-сервера: https://github.com/sogko/gulp-recipes/tree/master/browser-sync-nodemon-expressjs.Ошибка: прослушать EADDRINUSE 127.0.0.1:3000

Я использую глоток для запуска нескольких процессов, таких как минерализация, вулканизация и складывание моего проекта Polymer.

В gulpfile.js 364 линий большой, но это та часть, которая имеет значение:

// Build and serve the output from the dist build 
appsPaths.forEach(function(app) { 
    gulp.task('serve:dist:' + app, 
    ['browser-sync', 'default:' + app]); 
}); 

gulp.task('browser-sync', ['nodemon'], function() { 

    // for more browser-sync config options: http://www.browsersync.io/docs/options/ 
    browserSync({ 
    notify: false, 
    snippetOptions: { 
     rule: { 
     match: '<span id="browser-sync-binding"></span>', 
     fn: function (snippet) { 
      return snippet; 
     } 
     } 
    }, 

    // informs browser-sync to proxy our expressjs app which would run at the following location 
    proxy: 'http://localhost:3000', 

    // informs browser-sync to use the following port for the proxied app 
    // notice that the default port is 3000, which would clash with our expressjs 
    port: 4000, 

    // open the proxied app in chrome 
    browser: ['google-chrome'] 
    }); 
}); 

gulp.task('nodemon', function (cb) { 
    var called = false; 
    return $.nodemon({ 

    // nodemon our expressjs server 
    script: 'server/app.js', 

    // watch core server file(s) that require server restart on change 
    watch: ['server/app.js'] 
    }) 
    .on('start', function onStart() { 
     // ensure start only got called once 
     if (!called) { cb(); } 
     called = true; 
    }) 
    .on('restart', function onRestart() { 
     // reload connected browsers after a slight delay 
     setTimeout(function reload() { 
     browserSync.reload({ 
      stream: false 
     }); 
     }, BROWSER_SYNC_RELOAD_DELAY); 
    }); 
}); 

Теперь в то время как это прекрасно работает, и все, что я до сих пор получаю следующую ошибку, заканчивающуюся в моем журнале глотка:

^CDaniels-iMac:polymer dani$ gulp serve:dist:domain.com 
[22:33:10] Using gulpfile ~/dev/company/polymer/gulpfile.js 
[22:33:10] Starting 'nodemon'... 
[22:33:10] Starting 'clean:domain.com'... 
[22:33:10] Finished 'clean:domain.com' after 8.56 ms 
[22:33:10] Starting 'default:domain.com'... 
[22:33:10] Starting 'copy:domain.com'... 
[22:33:10] Starting 'styles:domain.com'... 
[22:33:11] Finished 'styles:domain.com' after 295 ms 
[22:33:11] [nodemon] 1.9.2 
[22:33:11] [nodemon] to restart at any time, enter `rs` 
[22:33:11] [nodemon] watching: server/app.js 
[22:33:11] [nodemon] starting `node server/app.js` 
[22:33:11] Finished 'nodemon' after 570 ms 
[22:33:11] Starting 'browser-sync'... 
[22:33:11] Finished 'browser-sync' after 20 ms 
events.js:154 
     throw er; // Unhandled 'error' event 
    ^

Error: listen EADDRINUSE 127.0.0.1:3000 
    at Object.exports._errnoException (util.js:890:11) 
    at exports._exceptionWithHostPort (util.js:913:20) 
    at Server._listen2 (net.js:1234:14) 
    at listen (net.js:1270:10) 
    at net.js:1379:9 
    at GetAddrInfoReqWrap.asyncCallback [as callback] (dns.js:63:16) 
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:82:10) 
[22:33:11] [nodemon] app crashed - waiting for file changes before starting... 
[BS] Proxying: http://localhost:3000 
[BS] Access URLs: 
---------------------------------- 
     Local: http://localhost:4000 
    External: http://10.0.1.28:4000 
---------------------------------- 
      UI: http://localhost:3001 
UI External: http://10.0.1.28:3001 
---------------------------------- 
[22:33:12] copy all files 16.03 MB 
[22:33:12] Finished 'copy:domain.com' after 1.78 s 
[22:33:12] Starting 'elements:domain.com'... 
[22:33:12] Finished 'elements:domain.com' after 5.39 ms 
[22:33:12] Starting 'jshint:domain.com'... 
[22:33:12] Starting 'images:domain.com'... 
[22:33:12] Starting 'fonts:domain.com'... 
[22:33:12] Starting 'html:domain.com'... 
[22:33:12] Finished 'images:domain.com' after 339 ms 
[22:33:12] Finished 'fonts:domain.com' after 157 ms 
[BS] Reloading Browsers... 

Это то, что я вижу перед и после запуска бега сценария глотка:

Daniels-iMac:polymer dani$ lsof -i tcp:3000 
Daniels-iMac:polymer dani$ 
Daniels-iMac:polymer dani$ lsof -i tcp:3000 
COMMAND PID USER FD TYPE    DEVICE SIZE/OFF NODE NAME 
node 95580 dani 19u IPv4 0x8560662b0408bad3  0t0 TCP localhost:hbci (LISTEN) 

Так похоже, на порту 3000 не так много. Что я могу сделать, чтобы разрешить эту ошибку?

+0

Похоже, что у вас уже есть узел, работающий на порту 3000. Вы можете убить процесс, чтобы проверить этот вопрос. Http://stackoverflow.com/questions/3855127/find-and-kill-process-locking-port-3000-on -mac –

+0

У меня это покрыто. Это либо не работает на порту 3000, либо я получил один результат pid, когда я запускаю 'lsof -i tcp: 3000' в зависимости от того, запущен ли я gulp или нет. Так что дело не в том, что есть еще один процесс, я пробовал несколько других невозможных портов: все производят ту же ошибку. похоже, что это больше похоже на то, что экспресс-сервер как-то запускается дважды с помощью nodemon. – Dani

ответ

1

Я думаю, что вы используете браузерSync с теми же портами несколько раз на http://localhost:3000 из-за forEach, который, как я предполагаю, имеет несколько путей.

+0

К сожалению, это отрицательно. При запуске console.log как в функции nodemon, так и в функции синхронизации с синхронизацией браузера оба они запускаются только один раз. То же самое относится к добавлению только одного элемента в массив appsPath: проблема сохраняется. Такое поведение, как и ожидалось, потому что при запуске функции gulp.task вы определяете только задачу. Вы не запускаете его. – Dani

+0

d0h! Хотя это было не совсем так. Я забыл инструкцию tryout require, которая запустила сервер в верхней части моего gulpfile и, таким образом, была упущена. Спасибо за вашу помощь Wilson Alberto – Dani

+0

Я рад, что вы нашли причину! Gulp может использовать некоторые улучшенные средства отладки, это похоже на одну из тех проблем, которые будут решены путем регистрации задач –

Смежные вопросы