如何将Heroku服务器连接到mongodb?

时间:2019-08-06 21:45:08

标签: node.js mongodb heroku

node.js的初学者,我在将服务器部署到heroku时遇到问题。

我制作了一个使用mongodb的server.js应用程序。 当我使用“ npm start” cmd在本地(http://localhost:8081/cmis/atom/default/versions?id=dddfd49f-ab13-435d-b65c-7e18d3bfbed3)上运行服务器时,它工作正常,我可以通过以下命令连接到mongo数据库:

lines_txt = UFO_Obsr.readlines()

(我遵循了本教程:[http://localhost:3000

但是当我在heroku上部署我的应用程序时,该应用程序无法连接到mongo db。我有以下错误(通过检查:heroku logs -t):

mongoose.connect(
'mongodb+srv://yolanpibrac:mypassword@cluster0-7z1th.mongodb.net/test?                        retryWrites=true&w=majority';, 
{ useNewUrlParser: true })  

我已经阅读了与此问题有关的所有问题,但是没有一种解决方案有效。 我有带群集连接字符串的mongodb帐户 我在输入密码时小心谨慎,所有特殊字符均经过URL编码。 我有一个procfile:web:节点src / server.js和一个index.html文件

我的server.js文件:

2019-08-06T21:06:33.086146+00:00 heroku[web.1]: Starting process with     command `node src/server.js`
2019-08-06T21:06:35.404641+00:00 heroku[web.1]: State changed from     starting to up
2019-08-06T21:06:35.058357+00:00 app[web.1]: Listening on port 26845
2019-08-06T21:06:36.144056+00:00 app[web.1]: Error while DB connecting
2019-08-06T21:06:36.149809+00:00 app[web.1]: { MongoNetworkError: failed     to connect to server [cluster0-shard-00-00-7z1th.mongodb.net:27017] on first     connect [MongoNetworkError: connection 5 to cluster0-shard-00-00-    7z1th.mongodb.net:27017 closed]
2019-08-06T21:06:36.149812+00:00 app[web.1]: at Pool.<anonymous>     (/app/node_modules/mongodb-core/lib/topologies/server.js:431:11)
2019-08-06T21:06:36.149814+00:00 app[web.1]: at Pool.emit     (events.js:189:13)
2019-08-06T21:06:36.149815+00:00 app[web.1]: at connect     (/app/node_modules/mongodb-core/lib/connection/pool.js:557:14)
2019-08-06T21:06:36.149816+00:00 app[web.1]: at callback     (/app/node_modules/mongodb-core/lib/connection/connect.js:109:5)
2019-08-06T21:06:36.149818+00:00 app[web.1]: at runCommand     (/app/node_modules/mongodb-core/lib/connection/connect.js:129:7)
2019-08-06T21:06:36.149819+00:00 app[web.1]: at Connection.errorHandler     (/app/node_modules/mongodb-core/lib/connection/connect.js:321:5)
2019-08-06T21:06:36.149820+00:00 app[web.1]: at Object.onceWrapper     (events.js:277:13)
2019-08-06T21:06:36.149821+00:00 app[web.1]: at Connection.emit     (events.js:189:13)
2019-08-06T21:06:36.149823+00:00 app[web.1]: at TLSSocket.<anonymous>     (/app/node_modules/mongodb-core/lib/connection/connection.js:350:12)
2019-08-06T21:06:36.149824+00:00 app[web.1]: at Object.onceWrapper     (events.js:277:13)
2019-08-06T21:06:36.149825+00:00 app[web.1]: at TLSSocket.emit     (events.js:189:13)
2019-08-06T21:06:36.149826+00:00 app[web.1]: at _handle.close     (net.js:613:12)
2019-08-06T21:06:36.149828+00:00 app[web.1]: at TCP.done     (_tls_wrap.js:386:7)
2019-08-06T21:06:36.149829+00:00 app[web.1]: name: 'MongoNetworkError',
2019-08-06T21:06:36.149830+00:00 app[web.1]: errorLabels: [     'TransientTransactionError' ],
2019-08-06T21:06:36.149832+00:00 app[web.1]:     [Symbol(mongoErrorContextSymbol)]: {} }

我的package.json:

//Définition des modules
const express = require("express");
const mongoose = require("mongoose");
const bodyParser = require('body-parser');
const app = express();
const path = require('path');



const dbRoute = 'mongodb+srv://yolanpibrac:mypassword@cluster0-    7z1th.mongodb.net/test?retryWrites=true&w=majority';
const dbRouteLocal = 'mongodb://localhost/db';
//Connexion à la base de donnée
mongoose.connect(dbRoute, { useNewUrlParser: true }).then(() => {
    console.log('Connected to mongoDB')
}).catch(e => {
    console.log('Error while DB connecting');
    console.log(e);
});



var urlencodedParser = bodyParser.urlencoded({
    extended: true
});
app.use(urlencodedParser);
app.use(bodyParser.json({limit: '10mb', extended: true}));

//Définition des CORS
app.use(function (req, res, next) {
    res.setHeader('Access-Control-Allow-Headers', 'Origin,X-Requested-    With,content-type,Accept,content-type,application/json');
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS,     PUT, PATCH, DELETE');
    res.setHeader('Access-Control-Allow-Credentials', true);
    next();
});



var router = express.Router();
app.use('/user', router);
require(__dirname + '/controllers/userController')(router);


app.get('/', function(req, res) {
    res.sendFile(path.join(__dirname, 'index.html'));
});
app.get('*', function(req, res) {
    res.sendFile(path.join(__dirname, 'index.html'));
});

//Définition et mise en place du port d'écoute
var port = process.env.PORT || "3000";

app.listen(port, () => console.log(`Listening on port ${port}`));

如有需要,我可以提供更多详细信息! 谢谢您的帮助,

1 个答案:

答案 0 :(得分:1)

您可能需要允许heroku访问mongodb服务器。

您可以执行以下操作:登录到Mongodb地图集,然后单击左侧的I Der安全设置中的“网络访问”,然后单击右侧顶部的“添加IP地址”,然后输入0.0.0.0/0。允许从所有ip访问的ip地址,或添加您的heroku服务器特定的ip即可获取。