我在建立与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);
}
您需要将数据库变量作为如下字符串包含在.env中:
DB="mongodb+srv://Charlesvdb:<password>@cluster0-bgul1.mongodb.net/test?retryWrites=true&w=majority"
您的错误在第一行:
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