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}`));
如有需要,我可以提供更多详细信息! 谢谢您的帮助,
答案 0 :(得分:1)
您可能需要允许heroku访问mongodb服务器。
您可以执行以下操作:登录到Mongodb地图集,然后单击左侧的I Der安全设置中的“网络访问”,然后单击右侧顶部的“添加IP地址”,然后输入0.0.0.0/0。允许从所有ip访问的ip地址,或添加您的heroku服务器特定的ip即可获取。