将nodejs / mongoose部署到heroku

这是我在Heroku的第一次尝试。 我能够在heroku上“部署成功”,但是当访问我的应用时,它说“ 应用程序失败”

我遵循这个指南: https : //scotch.io/tutorials/use-mongodb-with-a-node-application-on-heroku

我觉得棘手的是因为我使用的是Mongoose,它可能与URI没有很好的关系。 我也使用mlab插件。

这是我的后台设置:

var request = require('request'); var app = express(); var mongoCredentialss = require('/mongo_credentialss.json'); var conn = mongoose.connection; var path = require('path'); // connect to the database mongoose.connect('mongodb://' + mongoCredentials.username + ':' + mongoCredentialss.password + '@ds012345.mlab.com:12345/mydatabase-db'); mongoose.Promise = Promise; app.listen(3000, function() { console.log('Listening on 3000...'); }); 

我并没有真正理解.env,为了使它在本地工作,我只是通过.gitignore将我的用户名和密码存储在隐藏的.json文件中。 从指导,虽然,我只是试图将URI直接embedded到我的节点文件作为variables,看看是否甚至工作。 我不太确定'隐藏的环境'是如何工作的

后来,当我重新开始时,我还经常遇到一个问题,heroku没有检测到它的标准构build包:set heroku / nodejs

****编辑:

仍然看到一些问题。 我拿出我的'mongo creds',所以我的server.js文件现在看起来像这样:

  var express = require('express'); var mongoose = require('mongoose'); mongoose.connect(process.env.MONGODB_URI); var Promise = require('bluebird'); var bodyParser = require('body-parser'); var randtoken = require('rand-token'); var cors = require('cors'); var request = require('request'); var app = express(); var conn = mongoose.connection; var fs = require('fs'); var path = require('path'); app.listen(3000, function() { console.log('Our app is running on http://localhost:' + 3000); }); 

一些进一步的上下文:我有一个主项目文件夹,其中有2个子文件夹:后端和前端。 当我将其部署到heroku时,我将目录切换到主文件夹以部署所有内容。

另外,如果有帮助,这是我的package.json看起来像:

 "dependencies": { "bluebird": "^3.4.1", "body-parser": "^1.15.2", "cors": "^2.7.1", "express": "^4.14.0", "mongoose": "^4.5.3", "my-bcrypt": "^1.0.2", "rand-token": "^0.2.1", "request": "^2.74.0" }, "engines": { "node": "==6.0.0" } } 

******编辑2:heroku日志找不到我的'backend.js'。 现在,我有一个主要的项目文件夹目录,里面是2个文件夹:—> backend.js(node)和—> frontend.js(angular)

我的package.json看起来像这样:

 **"main": "frontend.js",** "scripts": { **"start": "node backend.js",** "test": "echo \"Error: no test specified\" && exit 1" }, 

我可能会误解heroku是如何find我的主要.js文件。 从我的理解,“开始”是节点文件,而“主”文件是用于前端的东西像angular / html的东西。

您应该能够通过执行此操作将Mongoose连接到您的MLab数据库:

 mongoose.connect(process.env.MONGODB_URI); 

当您在Heroku上使用插件时,提供程序(本例中为MLab)将为您创build一个数据库,然后将连接详细信息(包含数据库主机,用户名,密码,端口等的URL)存储为环境variables,您的应用程序可以使用。

这就是为什么你需要把这个环境variablesprocess.env.MONGODB_URI传递给mongoose.connect :它会把你连接到正确的数据库=)

更新 :由于你更新了你的问题,我注意到另一个问题,将阻止这个运行。 您需要告诉您的应用程序在特定的Heroku端口(而不是3000 )上进行监听。

你应该做的是修改你的app.listen(3000)调用,而不是说: app.listen(process.env.PORT || 3000); 这将强制您的应用程序在Heroku和本地开发框上正常运行。