gpt4 book ai didi

node.js - 将 nodejs/mongoose 部署到 heroku

转载 作者:可可西里 更新时间:2023-11-01 10:21:21 25 4
gpt4 key购买 nike

这是我第一次尝试使用 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,为了让它在本地工作,我只是将我的用户名和密码存储在一个隐藏的 .json 文件中,这要感谢 .gitignore。不过,根据指南,我只是尝试将 URI 作为变量直接嵌入到我的 Node 文件中,以查看它是否有效。我不太确定“隐藏环境”是如何工作的...

后来当我重新开始时,我也一直遇到 heroku 没有检测到它的标准构建包的反复出现的问题: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 如何找到我的主要 .js 文件。根据我的理解,“开始”是针对 Node 文件的,而“主”文件是针对前端内容的,例如 angular/html 内容。

最佳答案

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

mongoose.connect(process.env.MONGODB_URI);

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

这就是为什么您需要将环境变量 process.env.MONGODB_URI 传递到 mongoose.connect 中:它会将您连接到正确的数据库 =)

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

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

关于node.js - 将 nodejs/mongoose 部署到 heroku,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39183392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com