【问题标题】:Why does application work on localhost but results in CANNOT GET / when deployed?为什么应用程序在 localhost 上工作,但在部署时导致 CANNOT GET /?
【发布时间】:2020-06-22 18:41:15
【问题描述】:

所以我使用 MERN 堆栈为自己构建了一个个人作品集网站,并且一切都在 localhost 上运行良好,因此我决定使用 Google App Engine 进行部署。根据this 教程的建议,我将前端和后端作为两个单独的服务进行了扩展。前端工作得很好(见https://personal-website-279319.wl.r.appspot.com/),但后端不行。如果您在“项目”选项卡下查看,没有任何显示,因为后端无法连接到 Mongo Atlas 并实际检索数据。

server.js的代码,后端的起始页如下:

require('@google-cloud/debug-agent').start();
const express = require('express');
const cors = require('cors');
const mongoose = require('mongoose');
require('dotenv').config();

// Initialize Dependnecies and Set Port?
const app = express();
const port = process.env.PORT || 5000;

app.use(cors());
app.use(express.json());

// Connect To Mongoose
const uri = process.env.ATLAS_URI;
mongoose.connect(uri, { useNewUrlParser: true, useCreateIndex: true, useUnifiedTopology: true });

const connection = mongoose.connection;
connection.once('open', () => {
  console.log("MongoDB database connection established successfully");
})

// Connect URL Ending to Router
const contactRouter = require('./routes/contact');
const projectRouter = require('./routes/project');

app.use('/contact', contactRouter);
app.use('/projects', projectRouter);

// Listen for Connection on Port 
app.listen(port, () => {
    console.log(`Server is running on port: ${port}`);
});

如果您愿意,可以在 Github 存储库 here 上找到其余代码。我确实通过将这个 sn-p 代码放在 package.json 中来确保这个脚本可以在启动时运行。

  "scripts": {
    "start": "node server.js",
    "test": "echo \"Error: no test specified\" && exit 1"

当我直接转到服务 api (https://api-dot-personal-website-279319.wl.r.appspot.com/) 时,我得到一个页面说无法获取 /。我检查了控制台,应该说“与 MongoDB 的连接已成功建立”的消息不存在。我确实收到一条消息,说“内容安全策略”阻止加载某些网站图标(我不知道为什么。)我试图通过更改 /routes/projects 代码来解决这个问题,以防止这种情况发生

/* Route Get (Everything) Request */
router.route('/').get((req, res) => {
    res.setHeader("Content-Security-Policy", "");
    Project.find()
    .then(projects => res.json(projects))
    .catch(err => res.status(400).json('Error: ' + err));
});

但是一旦我部署它就会导致 500 服务错误。老实说,我真的很困惑。我想我错过了一些东西,但我不确定是什么。如果有人能解释我做错了什么或引导我朝着正确的方向前进,那将不胜感激,谢谢。

【问题讨论】:

  • 您的 Atlas URI 由 process.env.ATLAS_URI 确定。如果您使用的是 App Engine(标准),您需要确保 app.yaml 文件包含此 ATLAS_URI 环境变量的值。我怀疑您需要的不仅仅是数据库 URI,还可能需要用户名|密码环境变量。见:cloud.google.com/appengine/docs/standard/nodejs/config/…

标签: node.js google-app-engine gcloud mern


【解决方案1】:

您的 Atlas URI 由 process.env.ATLAS_URI 确定。如果您使用的是 App Engine(标准),您需要确保 app.yaml 文件包含此 ATLAS_URI 环境变量的值。我怀疑您需要的不仅仅是数据库 URI,还可能需要用户名|密码环境变量。

【讨论】:

    猜你喜欢
    • 2019-07-20
    • 2022-07-15
    • 1970-01-01
    • 2014-11-02
    • 2012-08-15
    • 2012-04-30
    • 2016-03-21
    • 2022-01-15
    • 2015-07-24
    相关资源
    最近更新 更多