【发布时间】: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