Javascript 将应用程序部署到Heroku,环境变量不是wokring

Javascript 将应用程序部署到Heroku,环境变量不是wokring,javascript,node.js,express,heroku,mongoose,Javascript,Node.js,Express,Heroku,Mongoose,我最近将我的node js应用程序部署到Heroku,在让我的应用程序正常工作时遇到了一些问题。我的应用程序已加载,但当我尝试登录时,它会中断。据我所知,由于某种原因,环境变量没有正确加载。db变量是一个取自my.ENV文件的字符串,是用于连接mongo db的Monogo URI。由于某种原因,当heroku运行它时,process.env.MongoURI没有定义。有人知道为什么会这样吗 我得到的具体错误是 错误 App.js 为此,您可能应该使用Heroku的内置环境变量编辑器。首先,确保

我最近将我的node js应用程序部署到Heroku,在让我的应用程序正常工作时遇到了一些问题。我的应用程序已加载,但当我尝试登录时,它会中断。据我所知,由于某种原因,环境变量没有正确加载。db变量是一个取自my.ENV文件的字符串,是用于连接mongo db的Monogo URI。由于某种原因,当heroku运行它时,process.env.MongoURI没有定义。有人知道为什么会这样吗

我得到的具体错误是

错误 App.js
为此,您可能应该使用Heroku的内置环境变量编辑器。

首先,确保将
.env
添加到
.gitignore
文件中。当您将项目部署到heroku时,它将自动适应新主机上的变量

查找更多信息:

是!Vercel和其他托管服务也是如此。即使有
.env
,我们也必须在其内置的环境编辑器中配置环境变量。@AjitKumar我刚刚在Heroku仪表板中了解了内置的配置变量,基本上我只需要将所有的.env变量放在那里,然后我就可以在代码中引用它们如何使用dotenv。在Heroku中使用我的私有变量对我来说似乎有点不安全。这也是我在部署之前在文档中看到的,也是我所期望的行为。我的gitignore已包含我的环境文件。
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.
/* eslint-disable no-unused-vars */
/* eslint-disable comma-dangle */
/* eslint-disable no-console */
/* eslint-disable arrow-parens */
const createError = require('http-errors');
const express = require('express');
const expressLayouts = require('express-ejs-layouts');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const mongoose = require('mongoose');
const flash = require('connect-flash');
const session = require('express-session');
const passport = require('passport');
const dotenv = require('dotenv');

dotenv.config();

const indexRouter = require('./server/index');

const port = process.env.PORT || 3000;
const app = express();

require('./server/config/passport')(passport);

// DB Config
const db = process.env.MongoURI;

mongoose.connect(db, { useNewUrlParser: true, useUnifiedTopology: true }) // I beleieve this is the line that is breaking the code.
  .then(() => { console.log('MONGODB Connected'); })
  .catch(err => console.log(err));

app.use(expressLayouts);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

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(session({
  secret: 'secret',
  resave: true,
  saveUninitialized: true
}));

app.use(passport.initialize());
app.use(passport.session());

app.use(flash());

app.use((req, res, next) => {
  res.locals.success_msg = req.flash('success_msg');
  res.locals.error_msg = req.flash('error_msg');
  res.locals.error = req.flash('error');
  next();
});

app.use('/', indexRouter);

// catch 404 and forward to error handler
app.use((req, res, next) => {
  next(createError(404));
});

// error handler
app.use((err, req, res, next) => {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

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

module.exports = app;