【问题标题】:Next.js Custom Server not working on FirebaseNext.js 自定义服务器无法在 Firebase 上运行
【发布时间】:2023-03-24 08:54:01
【问题描述】:

我的 Next.js 应用部署在 Firebase 上。我使用自定义服务器(server.ts)来启动应用程序(节点 src/server.ts)。下一个代码是 server.ts 和 firebaseFunctions.js。 server.ts 正在本地工作,因此代理正在工作。 为什么它在 fierbase 上不起作用?请告诉我解决方案。

// @ts-ignore
const express = require("express");
const next = require("next");
const { createProxyMiddleware } = require("http-proxy-middleware");

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

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

  console.log("sercer")

  server.use(
    "/api",
    createProxyMiddleware({
      target: "https://tus-schedule-api.herokuapp.com",
      changeOrigin: true,
    })
  );

  server.get("/super_test", (req, res) => {
    return res.status(200).send();
  });

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

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

const { join } = require("path");
const { https } = require("firebase-functions");
const { default: next } = require("next");

const isDev = process.env.NODE_ENV !== "production";
const nextjsDistDir = join("src", require("./src/next.config.js").distDir);

const nextjsServer = next({
  dev: isDev,
  conf: {
    distDir: nextjsDistDir,
  },
});
const nextjsHandle = nextjsServer.getRequestHandler();

exports.nextjsFunc = https.onRequest((req, res) => {
  return nextjsServer.prepare().then(() => nextjsHandle(req, res));
});

【问题讨论】:

    标签: typescript firebase proxy next.js


    【解决方案1】:

    我遇到了完全相同的问题,然后不知何故它在摆弄arround之后开始工作。 下面是一个简化的云函数示例,该函数可在本地运行,也可部署到 Firebase Cloud Functions。

    import * as functions from 'firebase-functions';
    const express = require('express');
    const { createProxyMiddleware } = require('http-proxy-middleware');
    const app = express();
    app.use('/api', createProxyMiddleware({ target: 'http://www.example.org', changeOrigin: true }));
    export const expressApi = functions.https.onRequest(app);
    

    我还有一个托管重写配置,如下所示

      "hosting": 
        "rewrites": [
          {
            "source": "**",
            "function": "expressApi"
          }
        ]
      }
    

    我建议您尝试这个示例,看看它是否适合您,尝试将您的问题减少到最少的代码量,以确定导致问题的原因。

    还有一些你可能想尝试的东西:

    • 确保使用最新的 firebase 工具:npm install -g firebase-tools(我现在使用的是 8.4.3)
    • 尝试删除文件夹“\functions\node_modules”中的所有内容,然后运行npm install
    • 重新启动您的计算机,这可能看起来很愚蠢,但有时会缓存一些东西,这会破坏一些东西。

    祝你好运。

    【讨论】:

      猜你喜欢
      • 2016-10-16
      • 2020-04-08
      • 2019-06-02
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      • 2017-10-30
      • 2014-05-04
      • 2010-12-09
      相关资源
      最近更新 更多