0

我目前正在尝试在 docker 容器上使用 babel 运行节点 es6,并且遇到了一些问题让应用程序开始在端口 3000 上侦听。当我看到数据库连接代码时,我可以看到正在处理 app.js 文件的位置跑步。问题似乎是即使 app.js 被调用,我也没有看到 /bin/www 被调用的任何内容,这将导致服务器监听端口 3000。

这是被调用以启动容器的命令:

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

app.js:……</p>

(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;

/斌/万维网:

#!/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 中使用箭头运算符?

4

1 回答 1

0

如果您无法通过normalizePort通话,您确定它当时存在吗?

您需要将函数的定义移到使用它的位置上方。

(如果您习惯于使用 var 和函数的旧 ES6 之前的“函数提升”,您应该注意这不适用于 const 和 let 语句。)

于 2019-01-26T15:46:23.570 回答