Далее. js Пользовательский сервер не работает с Firebase - PullRequest
0 голосов
/ 16 июня 2020

My 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));
});

1 Ответ

0 голосов
/ 19 июня 2020

У меня была точно такая же проблема, а затем как-то она начала работать после возни с arround. Ниже приведен пример упрощенной облачной функции, которая работает локально, а также развернута в облачных функциях Firebase.

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);

У меня также есть конфигурация перезаписи хостинга, как показано ниже Предлагаем вам попробовать этот пример и посмотреть, работает ли он для вас, попробуйте сократить проблему до минимального количества кода, чтобы определить, что вызывает проблему.

Также некоторые вещи, которые вы можете попробовать:

  • Убедитесь, что вы используете новейшие инструменты firebase: npm install -g firebase-tools (сейчас я использую 8.4.3)
  • Попробуйте удалить все в папке "\ functions \ node_modules", а затем запустите npm install
  • Перезагрузите компьютер, это может показаться глупым, но иногда что-то кешируется, и это ломает вещи.

Удачи.

...