在Heroku上部署带有MongoLab的NodeJS的问题

时间:2016-01-18 07:13:05

标签: node.js mongodb heroku

我在Heroku上部署我的应用时出现问题。我一直在浏览器中看到一个屏幕,显示应用程序错误。从我所读到的内容来看,这与MongoLab有关。

我已经在heroku上正确设置了PROCESS.ENV.MONGOLAB_URI,我无法让它工作。我也尝试为这个数据库添加一个新用户到MongoLAB,甚至该用户也不会工作。

我是Process.env.PORT,因为我使用的是Socket.io。它是我的app.js中的东西吗?

var express = require('express');
var http = require('http')
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');



var mongoose = require('mongoose');
mongoose.connect(process.env.MONGOLAB_URI || 'mongodb://localhost/queueThat');

var db = mongoose.connection;

var routes = require('./routes/index');

var app = express();
var server = http.createServer(app);
//Stuff for Sockets
var io = require('socket.io').listen(server);
//sockets

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'html');
app.engine('html', require('ejs').renderFile);

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);

//Connect to the Socket
io.on('connection', function(socket){
  socket.on('song send', function(song){
      io.emit('song send', song)
      console.log('artist on')
  })
  socket.on('artist send', function(artist){
      console.log('artist on')
      io.emit('artist send', artist)
  })

  //Disconnect
  socket.on('disconnect', function(){
    console.log('user disconnected');
  });

});


// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
      message: err.message,
      error: err
    });
  });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: {}
  });
});

var port = (process.env.PORT || 8000); 
server.listen(port, function() {
console.log("Listening on " + port);
});

module.exports = app;

我也试过添加我的节点和NPM版本无济于事。有任何想法吗? Package.json看起来像这样。

{
  "name": "queueThat",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "body-parser": "~1.13.2",
    "cookie-parser": "~1.3.5",
    "debug": "~2.2.0",
    "ejs": "^2.3.4",
    "express": "~4.13.1",
    "mongoose": "*",
    "morgan": "~1.6.1",
    "serve-favicon": "~2.3.0",
    "socket.io": "*"

  },
  "engines": {
    "node": "5.4.0",
    "npm": "3.3.12"
  }
}

1 个答案:

答案 0 :(得分:0)

constructor()并不代表MongoLAB存在问题,不一定。

要明确你需要仔细检查几个地方:

  1. 您需要在项目的根文件夹中拥有适当的Application Error
  2. 请注意Procfile npm脚本。
  3. 另外,您可以检查heroku postinstall上的日志(如果需要,可以检查200行以上),以确定您遇到的问题。