Node.js 赫罗库不能';部署MERN app后,t从db检索数据(给出503(服务不可用))
我的MERN stack应用程序在本地运行良好,但在Heroku上成功部署后,该应用程序仍在运行,但无法从Mongodb检索数据。项目未显示,用户无法登录,并且在控制台上出现以下错误:Node.js 赫罗库不能';部署MERN app后,t从db检索数据(给出503(服务不可用)),node.js,reactjs,mongodb,heroku,mern,Node.js,Reactjs,Mongodb,Heroku,Mern,我的MERN stack应用程序在本地运行良好,但在Heroku上成功部署后,该应用程序仍在运行,但无法从Mongodb检索数据。项目未显示,用户无法登录,并且在控制台上出现以下错误: https://tranquil-ridge-25766.herokuapp.com/api/items 503 (Service Unavailable) 我尝试了很多东西,但没有帮助。我怀疑我在路上做错了什么 如果(process.env.NODE_env==“production”) 线路。(我还在Her
https://tranquil-ridge-25766.herokuapp.com/api/items 503 (Service Unavailable)
我尝试了很多东西,但没有帮助。我怀疑我在路上做错了什么
如果(process.env.NODE_env==“production”)
线路。(我还在Heroku设置的配置变量中添加NODE.ENV=production)
这是我的server.js:
const express = require("express");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
const config = require("config");
const cors = require("cors");
const path = require("path");
const app = express();
app.use(cors());
//Bodyparser Middleware
app.use(bodyParser.json());
// DB config
const db = config.get("mongoURI");
//connect to Mongo
mongoose
.connect(db, {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true
})
.then(() => console.log("MongoDB Connected..."))
.catch(err => console.log(err));
//Use routes
app.use("/api/items", require("./routes/api/items"));
app.use("/api/users", require("./routes/api/users"));
//Serve static assets if in production
if (process.env.NODE_ENV === "production") {
//set static folder
app.use(express.static("client/build"));
app.get("*", (req, res) => {
res.sendFile(path.resolve(__dirname, "client", "build", "index.html"));
});
}
const port = process.env.PORT || 5000;
app.listen(port, () => console.log(`Server started on port ${port}`));
也许我们可以提取一些信息,准确地告诉我们我们得到了什么
const dbCheck = mongoose
.connect(db, {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true
})
.then(() => console.log(dbCheck, '---db check----))
.catch(err => console.log(err));
这可能会为我们提供有关您连接到哪个数据库的更多信息,也很难说,但您如何检查是否正在使用prod db?你在用这样的东西吗
mongoose.connect(process.env.MONGODB_URI ||
'mongodb://localhost:27017/kb')
如果您在json中输入节点_ENV,您确定它确实是“生产”吗?你可以运行一个
if (process.env.NODE_ENV == "production") {
通过这种方式,您可能会发现节点_ENV中有一个额外的空间或类似的东西,只是为了进行故障排除 也许我们可以提取一些信息,准确地告诉我们得到了什么
const dbCheck = mongoose
.connect(db, {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true
})
.then(() => console.log(dbCheck, '---db check----))
.catch(err => console.log(err));
这可能会为我们提供有关您连接到哪个数据库的更多信息,也很难说,但您如何检查是否正在使用prod db?你在用这样的东西吗
mongoose.connect(process.env.MONGODB_URI ||
'mongodb://localhost:27017/kb')
如果您在json中输入节点_ENV,您确定它确实是“生产”吗?你可以运行一个
if (process.env.NODE_ENV == "production") {
通过这种方式,您可能会发现节点_ENV中有一个额外的空间或类似的东西,只是为了进行故障排除 好了,我终于找到了解决办法。对于具有相同类型问题的任何人,应按照以下4个步骤在Heroku上部署MERN堆栈: 1-
const-port=process.env.port | 5000代码>确保在server.js中为端口添加一个env变量
2-还将process.env.MONGODB_URI变量添加到mongoose.connect
mongoose
.connect(process.env.MONGODB_URI || db, {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true
})
.then(() => console.log("MongoDB Connected..."))
.catch(err => console.log(err));
3-添加if语句以在生产中设置静态文件夹。它应该在你的应用程序路由之后
if (process.env.NODE_ENV === "production") {
app.use(express.static("client/build"));
app.get("*", (req, res) => {
res.sendFile(path.resolve(__dirname, "client", "build", "index.html"));
});
}
4-将这些行添加到scripts
对象中的主文件夹package.json文件中
“heroku后期构建”:“cd客户端和npm安装和npm运行构建”
完成这些步骤后,只需在终端上通过“heroku登录”和“heroku创建”创建,最后一步是将mongoLab插件添加到heroku:
heroku addons:create mongolab:sandbox
你需要向Heroku验证信用卡才能解决这个问题,但别担心,“沙盒”是一个免费选项,它从不收费。你的应用程序已经准备好了,需要详细的解释,而且,多亏了这个了不起的家伙,请在他的youtube频道上查看:好的,我终于找到了我的解决方案。对于具有相同类型问题的任何人,应按照以下4个步骤在Heroku上部署MERN堆栈:
1-const-port=process.env.port | 5000代码>确保在server.js中为端口添加一个env变量
2-还将process.env.MONGODB_URI变量添加到mongoose.connect
mongoose
.connect(process.env.MONGODB_URI || db, {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true
})
.then(() => console.log("MongoDB Connected..."))
.catch(err => console.log(err));
3-添加if语句以在生产中设置静态文件夹。它应该在你的应用程序路由之后
if (process.env.NODE_ENV === "production") {
app.use(express.static("client/build"));
app.get("*", (req, res) => {
res.sendFile(path.resolve(__dirname, "client", "build", "index.html"));
});
}
4-将这些行添加到scripts
对象中的主文件夹package.json文件中
“heroku后期构建”:“cd客户端和npm安装和npm运行构建”
完成这些步骤后,只需在终端上通过“heroku登录”和“heroku创建”创建,最后一步是将mongoLab插件添加到heroku:
heroku addons:create mongolab:sandbox
你需要向Heroku验证信用卡才能解决这个问题,但别担心,“沙盒”是一个免费选项,它从不收费。所以你的应用程序已经准备好了,需要详细的解释,而且,多亏了这个了不起的家伙,请在他的youtube频道上查看它:它使用以下格式吗?,mongodb://myDBReader:D1fficultP%40ssw0rd@mongodb0.example.com:27017/adminYou是MongoURI吗?就是这样:mongodb+srv://name:password@mernshopping nixua.mongodb.net/test?retryWrites=true&w=mailty
是的,看起来不错。我想知道你是否仍然连接到你的localhost,,我必须发布一些代码。是的,localhost工作正常。只是在Heroku部署后,它似乎无法连接数据库检查答案是否使用以下格式?,mongodb://myDBReader:D1fficultP%40ssw0rd@mongodb0.example.com:27017/adminYou是MongoURI吗?就是这样:mongodb+srv://name:password@mernshopping nixua.mongodb.net/test?retryWrites=true&w=mailty
是的,看起来不错。我想知道你是否仍然连接到你的localhost,,我必须发布一些代码。是的,localhost工作正常。只是在Heroku deployCheck之后,它似乎无法连接数据库。我添加了dbCheck的东西。什么都没有发生,仍然是一样的,它在本地工作,无法在Heroku中获取数据,控制台中也没有任何内容。。。我没有得到第二个代码,我唯一的mongoose.connect就是server.js中的那一个。如果您使用的是heroku,您应该在应用程序的设置页面中将mongoDB作为配置变量推送。把它带进来,检查一下,如果不是本地主机的话。另外,如果你有windows,你可以下载mongo Community,检查你的数据库是否真的是upI添加了dbCheck的东西没有发生什么,仍然是一样的,它在本地工作,不能在heroku中获取数据,控制台中也没有任何东西。。。我没有得到第二个代码,我唯一的mongoose.connect就是server.js中的那一个。如果您使用的是heroku,您应该在应用程序的设置页面中将mongoDB作为配置变量推送。把它带进来,检查一下,如果不是本地主机的话。此外,如果您有windows,您可以下载mongo Community,并查看数据库是否已启动