遇到连接到Atlas的问题。谁能指出我的错误所在?

问题描述 投票:0回答:1

我在建立与Atlas的连接时遇到问题。在主要代码下面找到我认为会出现问题的位置。有人可以看一下,告诉我我的错误在哪里以及为什么吗?


这是我的终端中的错误

charl@DESKTOP-PDIRO0T MINGW64 ~/Desktop/IRONHACK/Week-9/finalproject/api (master)
$ npm start

> [email protected] start C:\Users\charl\Desktop\IRONHACK\Week-9\finalproject\api      
> node ./bin/www


C:\Users\charl\Desktop\IRONHACK\Week-9\finalproject\api\node_modules\mongoose\lib\connection.js:579
    throw new MongooseError('The `uri` parameter to `openUri()` must be a ' +  
    ^
Error [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 (C:\Users\charl\Desktop\IRONHACK\Week-9\finalproject\api\node_modules\mongoose\lib\error\mongooseError.js:10:11)
    at NativeConnection.Connection.openUri (C:\Users\charl\Desktop\IRONHACK\Week-9\finalproject\api\node_modules\mongoose\lib\connection.js:579:11)
    at Mongoose.connect (C:\Users\charl\Desktop\IRONHACK\Week-9\finalproject\api\node_modules\mongoose\lib\index.js:333:15)
    at Object.<anonymous> (C:\Users\charl\Desktop\IRONHACK\Week-9\finalproject\api\app.js:22:4)
    at Module._compile (internal/modules/cjs/loader.js:1158:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)  
    at Module.load (internal/modules/cjs/loader.js:1002:32)
    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
    at Module.require (internal/modules/cjs/loader.js:1044:19)
    at require (internal/modules/cjs/helpers.js:77:18)
    at Object.<anonymous> (C:\Users\charl\Desktop\IRONHACK\Week-9\finalproject\api\bin\www:7:11)
    at Module._compile (internal/modules/cjs/loader.js:1158:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)  
    at Module.load (internal/modules/cjs/loader.js:1002:32)
    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12) {
  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'
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] start: `node ./bin/www`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\charl\AppData\Roaming\npm-cache\_logs\2020-05-09T14_44_59_447Z-debug.log

这是我的app.js文件

var express = require('express');
var app = express();
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
const mongoose = require("mongoose")
const session = require("express-session")
const MongoStore = require("connect-mongo")(session)
const cors = require("cors")

app.use(cors({
  credentials: true,
  origin: true
}))

app.use(express.static('public'))

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

mongoose
  .connect(process.env.DB, {useNewUrlParser: true})
  .then(x => console.log(`Connected to Mongo! Database name: "${x.connections[0].name}"`))
  .catch(err => console.error('Error connecting to mongo', err));

app.use(session({
secret: "basic-auth-secret",
cookie: {maxAge: 600000},
store: new MongoStore({
    mongooseConnection: mongoose.connection,
    ttl: 24 * 60 * 60
    })
}));  

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

module.exports = app;

**这是我的.env文件。我更改了代码,但为了保护密码而将其遗漏在这里**

cloudName=dzbtxr0rg
cloudKey=258887233254198
cloudSecret=eQxzPaOFg3-hWVf80_LjxusI6tI
DB=mongodb+srv://Charlesvdb:<password>@cluster0-bgul1.mongodb.net/test?retryWrites=true&w=majority
SESSION_SECRET=basic-auth-secret
client_origin_a=http://localhost:3001
client_origin_b=https://localhost:3001

这是我的./bin/www文件

#!/usr/bin/env node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('api:server');
var http = require('http');

/**
 * Get port from environment and store in Express.
 */

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
 * Normalize a port into a number, string, or false.
 */

function normalizePort(val) {
  var port = parseInt(val, 10);

  if (isNaN(port)) {
    // named pipe
    return val;
  }

  if (port >= 0) {
    // port number
    return port;
  }

  return false;
}

/**
 * Event listener for HTTP server "error" event.
 */

function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  var bind = typeof port === 'string'
    ? 'Pipe ' + port
    : 'Port ' + port;

  // handle specific listen errors with friendly messages
  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}

/**
 * Event listener for HTTP server "listening" event.
 */

function onListening() {
  var addr = server.address();
  var bind = typeof addr === 'string'
    ? 'pipe ' + addr
    : 'port ' + addr.port;
  debug('Listening on ' + bind);
}
javascript
1个回答
0
投票

您需要将数据库变量作为如下字符串包含在.env中:

DB="mongodb+srv://Charlesvdb:<password>@cluster0-bgul1.mongodb.net/test?retryWrites=true&w=majority"

0
投票

您的错误在第一行:

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
© www.soinside.com 2019 - 2024. All rights reserved.