Express Google应用程序引擎未加载API(首次打开后)

Express Google应用程序引擎未加载API(首次打开后),express,google-app-engine,google-cloud-platform,next.js,Express,Google App Engine,Google Cloud Platform,Next.js,我使用next.js开发了一个react应用程序 现在我想把它部署到谷歌云应用引擎 该应用程序包括react前端和模拟API(包括mock.db),以便在开发过程中临时存储数据 问题如下: 我打开的第一个实例工作正常。当我在另一个浏览器中打开它时,只提供了react应用程序,但API不在那里(导致react应用程序只显示控件帧,没有数据)。可以通过localhost:3033访问API服务器 和我的同事们一样,他们试图打开它,只看到了白色 我没有在谷歌云应用程序引擎上配置任何额外的东西,只是基本

我使用next.js开发了一个react应用程序

现在我想把它部署到谷歌云应用引擎

该应用程序包括react前端和模拟API(包括mock.db),以便在开发过程中临时存储数据

问题如下: 我打开的第一个实例工作正常。当我在另一个浏览器中打开它时,只提供了react应用程序,但API不在那里(导致react应用程序只显示控件帧,没有数据)。可以通过localhost:3033访问API服务器

和我的同事们一样,他们试图打开它,只看到了白色

我没有在谷歌云应用程序引擎上配置任何额外的东西,只是基本上是普通的

这是否与应用程序引擎增加额外实例有关?我想不出是什么导致了这个问题

package.json

"prestart:api": "node createMockDb.js",
    "start:api": "node apiServer.js",
    "dev": "node server.js",
    "build": "next build",
    "start": "cross-env NODE_ENV=production node server.js & node createMockDB.js & node apiServer.js"
server.js

const express = require("express");
const next = require("next");

const port = parseInt(process.env.PORT, 10) || 8080;
const dev = process.env.NODE_ENV !== "production";
const app = next({ dev });
const handle = app.getRequestHandler();

app.prepare().then(() => {
  const server = express();

  server.get("/products/overview", (req, res) => {
    return app.render(req, res, "/products/overview", req.query);
  });

  server.get("/products/roadmap", (req, res) => {
    return app.render(req, res, "/products/roadmap", req.query);
  });

  server.get("/strategy/goals", (req, res) => {
    return app.render(req, res, "/strategy/goals", req.query);
  });

  server.get("/strategy/metrics", (req, res) => {
    return app.render(req, res, "/strategy/metrics", req.query);
  });

  /* server.get("/posts/:id", (req, res) => {
    return app.render(req, res, "/posts", { id: req.params.id });
  }); */

  server.all("*", (req, res) => {
    return handle(req, res);
  });

  server.listen(port, err => {
    if (err) throw err;
    console.log(`> Ready on http://localhost:${port}`);
  });
});

apiServer.js

/* eslint-disable func-names */
/* eslint-disable no-console */
const jsonServer = require("json-server");

const server = jsonServer.create();

const path = require("path");

const router = jsonServer.router(path.join(__dirname, "server/db.json"));

const middlewares = jsonServer.defaults({

  static: "node_modules/json-server/dist"
});


server.use(middlewares);


server.use(jsonServer.bodyParser);


server.use(function(req, res, next) {
  setTimeout(next, 0);
});


function createSlug(value) {
  return value
    .replace(/[^a-z0-9_]+/gi, "-")
    .replace(/^-|-$/g, "")
    .toLowerCase();
}

function validateProduct(product) {
  if (!product.title) return "Title is required.";
  if (!product.tagline) return "Tagline is required.";
  if (!product.description) return "Description is required.";
  return "";
}

server.use((req, res, next) => {
  if (req.method === "POST") {
    req.body.createdAt = Date.now();
  }

  next();
});

server.post("/products/", function(req, res, next) {
  const error = validateProduct(req.body);
  if (error) {
    res.status(400).send(error);
  } else {
    req.body.slug = createSlug(req.body.title); 
    next();
  }
});


server.use(router);


const port = 3033;
server.listen(port, () => {
  console.log(`JSON Server is running on port ${port}`);
});




您似乎试图在单个应用程序引擎实例中从
npm start
命令启动多个web服务器:

"start": "cross-env NODE_ENV=production node server.js & node createMockDB.js & node apiServer.js"
我以前从未见过这种情况,我很怀疑GAE是否能处理好它。GAE需要一个单节点应用程序在端口
process.env.port
上为请求提供服务


如果您希望在同一个GAE项目中运行多个不同的服务器,您可能应该像部署不同的服务一样独立地部署它们。它们中的每一个都应该有一个指定唯一服务名称的
app.yaml
,您将分别部署它们。该命令相当全面。

您似乎试图在单个应用程序引擎实例中从
npm start
命令启动多个web服务器:

"start": "cross-env NODE_ENV=production node server.js & node createMockDB.js & node apiServer.js"
我以前从未见过这种情况,我很怀疑GAE是否能处理好它。GAE需要一个单节点应用程序在端口
process.env.port
上为请求提供服务

如果您希望在同一个GAE项目中运行多个不同的服务器,您可能应该像部署不同的服务一样独立地部署它们。它们中的每一个都应该有一个指定唯一服务名称的
app.yaml
,您将分别部署它们。这个问题相当全面