heroku不能写数据给mlab

我有一个节点快递mongodb应用程序,可以在我的本地计算机上成功运行CRUD操作mlab。 我可以在我的mlab帐户中看到该项目。 但是当我推送到Heroku,我可以看到网站,并可以访问其他的一切,但我不能将数据保存到mlab。 在几秒钟后的控制台日志中,我得到503(服务不可用)。

在heroku中,我还安装了mlab mongodb附加组件,并尝试了以下代码,但仍无法保存。

herokuconfiguration:添加NODE_ENV =生产

这是我的config.js。 (证书已被删除发布)

exports.DATABASE_URL = process.env.DATABASE_URL || global.DATABASE_URL || (process.env.NODE_ENV === 'production' ? 'mongodb://localhost/local-app': 'mongodb://username:password@database.mlab.com:9999/databasename'); exports.PORT = process.env.PORT || 8080; 

这是我的server.js。

 var express = require('express'); var bodyParser = require('body-parser'); var jsonParser = bodyParser.json(); var mongoose = require('mongoose'); var config = require('./config'); var Item = require('./models/item'); // Mongoose Connect var app = express(); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); app.use(express.static('public')); /* STEP 1 - creating objects and constructors*/ var runServer = function(callback) { mongoose.connect(config.DATABASE_URL, function(err) { if (err && callback) { return callback(err); } console.log("Connected to mongodb!"); app.listen(config.PORT, function() { console.log('Listening on localhost:' + config.PORT); if (callback) { callback(); } }); }); }; if (require.main === module) { runServer(function(err) { if (err) { console.error(err); } }); }; /* STEP 2 - api end points */ app.get('/items', function(req, res) { Item.find(function(err, items) { if (err) { return res.status(500).json({ message: 'Internal Server Error' }); } res.json(items); }); }); app.post('/items', jsonParser, function(req, res) { console.log("req:", req.body); if (!req.body) { return res.sendStatus(400); } else { var favoritesList = req.body; res.status(201).json(favoritesList); } Item.create({ name: req.body.name, wineResults: req.body.wineResults }, function(err, item) { if (err) { //return res.sendStatus(500).json({ message: err //}); } else { message: "done" //res.sendStatus(200); } }); }); app.use('*', function(req, res) { res.status(404).json({ message: 'Not Found' }); }); /* STEP 3 - server settings*/ app.listen(process.env.PORT || 8080, process.env.IP); exports.app = app; exports.runServer = runServer; 

将不胜感激任何帮助。 谢谢。

我相信你的条件逻辑有一个错误(在你的config.js )。 这是你现在的代码:

 exports.DATABASE_URL = process.env.DATABASE_URL || global.DATABASE_URL || (process.env.NODE_ENV === 'production' ? 'mongodb://localhost/local-app': 'mongodb://username:password@database.mlab.com:9999/databasename'); 

以下是您应该将其更改为:

 exports.DATABASE_URL = process.env.MONGODB_URI || 'mongodb://localhost/local-app'; 

这将使您的应用程序的行为,例如:

  • 如果在本地主机上运行,​​则不应该设置MONGODB_URI环境variables,因此应用程序将在本地主机上写入mongodb。
  • 如果在Heroku上运行,你将有一个MONGODB_URI环境variables,所以你应该使用该数据库。

你不需要为数据库做NODE_ENV什么特别的事情 – 这应该全部由你的数据库环境variables来解决。