Javascript 通过app.js连接到本地MongoDB服务器时出现问题
我是MongoDB的新手,我只是在Ubuntu终端中设置了MongoDB,mongod和mongo命令在不同的终端中运行。然而,我无法让我的app.js启动一个网站正常运行。以下是代码的开头:Javascript 通过app.js连接到本地MongoDB服务器时出现问题,javascript,node.js,mongodb,ubuntu,mongoose,Javascript,Node.js,Mongodb,Ubuntu,Mongoose,我是MongoDB的新手,我只是在Ubuntu终端中设置了MongoDB,mongod和mongo命令在不同的终端中运行。然而,我无法让我的app.js启动一个网站正常运行。以下是代码的开头: var express = require('express'); var path = require('path'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var e
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var exphbs = require('express-handlebars');
var helpers = require('handlebars-helpers')();
var expressValidator = require('express-validator');
var flash = require('connect-flash');
var session = require('express-session');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var mongoose = require('mongoose');
var fs = require('fs');
var net = require('net');
process.on('uncaughtException', (err) => {
console.log(err);
});
//const config = {
// autoIndex: false,
// useNewUrlParser: true
//};
//return mongoose.connect(uri, config);
//Log into MongoDB server
//var db = mongoose.connection;
const db = mongoose.connection
const url = 'mongodb://127.0.0.1:27017/modeltest'
mongoose.connect(process.env.MONGO_URI, {
useUnifiedTopology: true,
useNewUrlParser: true,
})
.then(() => console.log('DB Connected!'))
.catch(err => {
console.log('DB Connection Error: ' + err);
});
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var exphbs = require('express-handlebars');
var helpers = require('handlebars-helpers')();
var expressValidator = require('express-validator');
var flash = require('connect-flash');
var session = require('express-session');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var mongoose = require('mongoose');
var fs = require('fs');
var net = require('net');
process.on('uncaughtException', (err) => {
console.log(err);
});
//const config = {
// autoIndex: false,
// useNewUrlParser: true
//};
//return mongoose.connect(uri, config);
//Log into MongoDB server
var db = mongoose.connection;
//const db = mongoose.connection
//console.log(process.env.MONGO_URI)
const {MongoClient} = require('mongodb');
async function main(){
const uri = "mongodb+srv://theusernamewhichientered:thepassword@modeltest-3lpoi.mongodb.net/test?retryWrites=true&w=majority"
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
try {
await client.connect();
await listDatabases(client);
} catch (e) {
console.error(e);
} finally {
await client.close();
}
}
main().catch(console.error);
async function listDatabases(client){
databasesList = await client.db().admin().listDatabases();
console.log("Databases:");
databasesList.databases.forEach(db => console.log(` - ${db.name}`));
};
当我运行node app.js
时,出现以下错误:
{ MongooseError: The `uri` parameter to `openUri()` must be a string, got "undefined". Make sure the first parameter to `mongoose.connect()` or `mongoose.createConnection()` is a string.
at new MongooseError (/home/ubuntu/modeltest/web/node_modules/mongoose/lib/error/mongooseError.js:10:11)
at NativeConnection.Connection.openUri (/home/ubuntu/modeltest/web/node_modules/mongoose/lib/connection.js:579:11)
at Mongoose.connect (/home/ubuntu/modeltest/web/node_modules/mongoose/lib/index.js:333:15)
at Object.<anonymous> (/home/ubuntu/modeltest/web/app.js:31:10)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Function.Module.runMain (module.js:693:10)
at startup (bootstrap_node.js:188:16)
at bootstrap_node.js:609:3
message: 'The `uri` parameter to `openUri()` must be a string, got "undefined". Make sure the first parameter to `mongoose.connect()` or `mongoose.createConnection()` is a string.',
name: 'MongooseError' }
ubuntu@ip-172-31-27-34:~/mod
但是当我运行node app.js
时,我得到了以下输出:
DIRNAME
/home/ubuntu/modeltest/web
Server started on port 3000
{ MongoServerSelectionError: connection <monitor> to 52.203.196.37:27017 closed
at Timeout.waitQueueMember.timer.setTimeout [as _onTimeout] (/home/ubuntu/modeltest/web/node_modules/mongodb/lib/core/sdam/topology.js:430:30)
at ontimeout (timers.js:482:11)
at tryOnTimeout (timers.js:317:5)
at Timer.listOnTimeout (timers.js:277:5)
name: 'MongoServerSelectionError',
reason:
TopologyDescription {
type: 'ReplicaSetNoPrimary',
setName: null,
maxSetVersion: null,
maxElectionId: null,
servers:
Map {
'modeltest-shard-00-00-3lpoi.mongodb.net:27017' => [Object],
'modeltest-shard-00-01-3lpoi.mongodb.net:27017' => [Object],
'modeltest-shard-00-02-3lpoi.mongodb.net:27017' => [Object] },
stale: false,
compatible: true,
compatibilityError: null,
logicalSessionTimeoutMinutes: null,
heartbeatFrequencyMS: 10000,
localThresholdMS: 15,
commonWireVersion: null },
[Symbol(mongoErrorContextSymbol)]: {} }
DIRNAME
/home/ubuntu/modeltest/web
服务器在端口3000上启动
{MongoServerSelectionError:与52.203.196.37:27017的连接已关闭
at Timeout.waitQueueMember.timer.setTimeout[as _onTimeout](/home/ubuntu/modeltest/web/node_modules/mongodb/lib/core/sdam/topology.js:430:30)
在ontimeout(timers.js:482:11)
在tryOnTimeout(timers.js:317:5)
at Timer.listOnTimeout(timers.js:277:5)
名称:“MongoServerSelectionError”,
原因:
拓扑描述{
类型:“ReplicateSetNoPrimary”,
setName:null,
maxSetVersion:null,
maxElectionId:null,
服务器:
地图{
'modeltest-shard-00-00-3lpoi.mongodb.net:27017'=>[Object],
'modeltest-shard-00-01-3lpoi.mongodb.net:27017'=>[Object],
'modeltest-shard-00-02-3lpoi.mongodb.net:27017'=>[Object]},
陈腐:错,
是的,
兼容性错误:null,
logicalSessionTimeoutMinutes:空,
心跳频率:10000,
localThresholdMS:15,
commonWireVersion:null},
[符号(mongoErrorContextSymbol)]:{}
我能做些什么来克服这个问题呢?看起来错误是说变量
process.env.MONGO\u URI
未定义。尝试在mongoose connect之前添加console.log(process.env.MONGO\u URI)
,因为可能没有设置MONGO\u URI变量。或者,尝试传递您的url
变量,而不是process.env.MONGO_URI
看起来错误是说变量process.env.MONGO_URI
未定义。尝试在mongoose connect之前添加console.log(process.env.MONGO\u URI)
,因为可能没有设置MONGO\u URI变量。或者,尝试传递您的url
变量,而不是process.env.MONGO\u URI
我会使用MongoDB Atlas,至少在开始时是这样。它比本地数据库更容易工作@mtrussell我已经建立了一个Atlas帐户,并且我尝试将URI传递到函数中——关于下一步可以尝试什么的想法?我将使用MongoDB Atlas,至少在开始时是这样。它比本地数据库更容易工作@mtrussell我已经设置了一个Atlas帐户,我尝试将URI传递到函数中-思考下一步可以尝试什么?传递url变量能够启动服务器,但现在我得到错误DB Connection error:MongooseServerSelectionError:connect econnreference127.0.0.1:27017
。从这个堆栈溢出线程(),我创建了一个server.js文件,用于验证应用程序是否可以在端口3000上侦听。关于下一步可以尝试什么的想法?未定义的DIRNAME/home/ubuntu/modeltest/web服务器在端口3000上启动
看起来您的数据库当前没有运行。。。你能连接到mongo shell吗?你提到的这个问题的一个答案可能会有所帮助:我最初让我的mongo和mongod命令在Ubuntu终端中运行,app.js在EC2实例中运行,但现在我让mongo shell也在EC2实例中运行。我仍然收到一个ReferenceError:uri未定义error。2020-04-29T00:56:24.674+0000 I网络[listener]连接从127.0.0.1:58268接受(1个连接现在打开)2020-04-29T00:56:24.675+0000 I网络[conn1]从127.0.0.1:58268 conn:{应用程序:{name:“MongoDB Shell”},驱动程序:{名称:“MongoDB内部客户端”,版本:“3.6.3”},操作系统:{类型:“Linux”,名称:“Ubuntu”,体系结构:“x86_64”,版本:“18.04”}
当我运行节点app.js
命令时,mongod
shell中返回的内容传递url变量能够启动服务器,但是现在我从这个堆栈溢出线程(),我创建了一个server.js文件,该文件验证了应用程序可以在端口3000上侦听。接下来我可以尝试什么呢?未定义的DIRNAME/home/ubuntu/modeltest/web服务器在端口3000上启动
看起来你的数据库当前没有运行……你能够连接到mongo shell吗?关于你提到的线程的一个答案是帮助:我最初让我的mongo和mongod命令在我的Ubuntu终端中运行,app.js在EC2实例中运行,但现在我让mongo shell也在EC2实例中运行。我仍然得到一个ReferenceError:uri未定义
错误。2020-04-29T00:56:24.674+0000 I网络[listener]从127.0.0.1:58268#1(1个连接现在打开)2020-04-29T00:56:24.675+0000 I网络接受的连接[conn1]从127.0.0.1:58268 conn:{应用程序:{名称:“MongoDB Shell”},驱动程序:{名称:“MongoDB内部客户端”,版本:“3.6.3”},操作系统:{类型:“Linux”,名称:“Ubuntu”,体系结构:“x86_64”,版本:“18.04”}
当我运行node app.js
命令时,mongod
shell中返回的内容