babel-узел, не могу заставить сервер слушать порт - PullRequest
0 голосов
/ 25 января 2019

В настоящее время я пытаюсь запустить узел es6 с babel в док-контейнере и сталкиваюсь с некоторыми проблемами, заставляя приложение начать прослушивать порт 3000. Я могу видеть, где обрабатывается файл app.js, так как я вижуработает код подключения к базе данных.Кажется, проблема в том, что вызывается app.js. Я не вижу ничего из / bin / www, вызывающего вызов, который мог бы привести к прослушиванию сервером порта 3000.

Это команда, которая вызываетсячтобы запустить контейнер:

nodemon ./bin/www -L --exec babel-node --inspect = 0.0.0.0: 56745

app.js:……

(async () => {
    try {
        console.log('about to start the database connection... - 1');
        mongoose.set('useCreateIndex', true);
        mongoose.Promise = global.Promise;
        console.log('about to start the database connection... - 2');
        setTimeout(async () => {
            await mongoose.connect(process.env.DB_HOST, {useNewUrlParser: true});
        }, 60000);
        //await mongoose.connect(process.env.DB_HOST, {useNewUrlParser: true});
        console.log('about to start the database connection... - 3');

        let db = mongoose.connection;
        console.log('about to start the database connection... - 4');
        db.on('error', console.error.bind(console, 'MongoDB connection error:'));
        console.log('about to start the database connection... - 5');
    } catch (e) {
        console.log('We have an error.....');
        console.log(e);
    }
})()


let app = express();

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use(helmet());
app.use(methodOverride());

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/group', groupsRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use((err, req, res, next) => {
    if (process.env.NODE_ENV === "development") {
        app.use((err, req, res, next) => {
            if (err instanceof NotFoundError) {
                //res.status(404).send(err.message);
                res.statusCode = 404;
                return res.json({
                    errors: [err.stack]
                });
            } else {
                //res.status(500).send('An error occurred while processing your request.');
                res.statusCode = 500;
                return res.json({
                    errors: [err.stack]
                    //errors: ['An error occurred while processing your request.']
                });
            }
        });
    }

    // production error handler
    // no stacktraces leaked to user
    console.log('about to begin configurations..... 7');
    if (process.env.NODE_ENV !== "development") {
        app.use((err, req, res, next) => {
            if (err instanceof NotFoundError) {
                //res.status(404).send(err.message);
                res.statusCode = 404;
                return res.json({
                    errors: [err.stack]
                });
            } else {
                //res.status(500).send('An error occurred while processing your request.');
                res.statusCode = 500;
                return res.json({
                    errors: [err.stack]
                    //errors: ['An error occurred while processing your request.']
                });
            }
        });
    }
});

module.exports = app;

/ bin / www:

#!/usr/bin/env node

/**
 * Module dependencies.
 */

let app = require('../app');
let debug = require('debug’)(‘myapp:server');
let http = require('http');

/**
 * Get port from environment and store in Express.
 */

let port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

/**
 * Create HTTP server.
 */

let server = http.createServer(app);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
 * Normalize a port into a number, string, or false.
 */

const normalizePort = (val) => {
  debug('port = ' + val);
  let port = parseInt(val, 10);

  if (isNaN(port)) {
    // named pipe
    return val;
  }

  if (port >= 0) {
    // port number
    return port;
  }

  return false;
}

/**
 * Event listener for HTTP server "error" event.
 */

const onError = (error) => {
  debug('Houston we have a problem');
  if (error.syscall !== 'listen') {
    throw error;
  }

  let bind = typeof port === 'string'
    ? 'Pipe ' + port
    : 'Port ' + port;

  // handle specific listen errors with friendly messages
  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}

/**
 * Event listener for HTTP server "listening" event.
 */

const onListening = () => {
  debug('Listening');
  let addr = server.address();
  let bind = typeof addr === 'string'
    ? 'pipe ' + addr
    : 'port ' + addr.port;
  debug('Listening on ' + bind);
}

.babelrc:

{
  "presets": ["env"],
   "plugins": ["transform-object-rest-spread", "transform-async-to-generator"]
}

Обновление:

Проблема, похоже, связана с узлом и оператором стрелки.Когда я перешел на ключевое слово function, оно начало работать.Я добавил следующее в мой файл .bablerc:

{
  "presets": ["env"],
   "plugins": ["transform-object-rest-spread", "transform-async-to-generator", "transform-es2015-arrow-functions"]
}

, но это все еще проблема.Как я могу использовать оператор стрелки с nodejs?

1 Ответ

0 голосов
/ 26 января 2019

Если вы не можете пройти дальше вызова normalizePort, вы уверены, что он существует в то время?

Вам нужно переместить определение функции над местом, где вы ее используете.

(Если вы привыкли к «подъему» старых версий, предшествующих ES6, с использованием переменных и функций, вы должны заметить, что это не работает с операторами const и let.)

...