我有一个节点快速mongodb应用程序,可以在我的本地计算机上成功运行CRUD操作以进行mlab。我可以在我的mlab帐户中看到添加的项目。但是,当我将其发布到heroku时,我可以看到该网站并可以访问其他所有内容,但是我无法将数据保存到mlab。几秒钟后,在控制台日志中,我得到503(服务不可用)。

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

heroku配置:添加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:[email protected]: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:[email protected]:9999/databasename');


这是您应将其更改为:

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


这将使您的应用程序表现出应有的行为,例如:


如果在localhost上运行,则不应设置MONGODB_URI环境变量,因此您的应用程序将写入localhost上的mongodb。
如果在Heroku上运行,则将具有MONGODB_URI环境变量,因此应使用该数据库。


您无需对数据库的NODE_ENV东西做任何特殊的事情-这一切都应单独由数据库环境变量解决。

关于javascript - heroku无法将数据写入mlab,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41768330/

10-11 06:23