【问题标题】:Firebase Functions: Upload Error: HTTP Error: 400, Unknown ErrorFirebase 函数:上传错误:HTTP 错误:400,未知错误
【发布时间】:2021-05-21 18:43:29
【问题描述】:

我尝试将 Angular Universal SSR 应用的服务器端部署到 Firebase Functions,但遇到了错误 Upload Error: HTTP Error: 400, Unknown Error

据我了解,当部署是一个巨大的文件(在我的例子中是 438mb)时,这个错误经常发生。它这么大的原因是因为我正在部署我的网站的本地化版本,所以dist/browserdist/server 都有endefr 目录,内容几乎相同。我该如何解决这个问题?

控制台输出

=== Deploying to 'PROJECT_NAME'...

i  deploying functions
Running command: npm --prefix "$RESOURCE_DIR" run lint
+  functions: Finished running predeploy script.
i  functions: ensuring required API cloudfunctions.googleapis.com is enabled...
i  functions: ensuring required API cloudbuild.googleapis.com is enabled...
+  functions: required API cloudfunctions.googleapis.com is enabled
i  functions: preparing dist directory for uploading...
i  functions: packaged dist (438.04 MB) for uploading
!  functions: Upload Error: HTTP Error: 400, Unknown Error

Error: HTTP Error: 400, Unknown Error

index.js

const functions = require('firebase-functions');

// Increase readability in Cloud Logging
require("firebase-functions/lib/logger/compat");

const expressApp = require('./server/proxy').app();

exports.ssr = functions
  .region('us-central1')
  .runWith({})
  .https
  .onRequest(expressApp);

proxy.ts(编译成 js 并放入 dist/server 文件夹)

import * as express from 'express';
import * as cookieParser from 'cookie-parser';
import { join } from 'path';

export function app() {
  const server = express();

  server.use(cookieParser());

  const languages = ['en', 'de', 'fr'];

  languages.forEach((locale) => {
    const appServerModule = require(join(__dirname, locale, 'main.js'));
    server.use(`/${locale}`, appServerModule.app(locale));
  });

  server.get('/(:locale(en|fr|de)/)?*', (req, res, next) => {
    const { locale } = req.params;
    let userLocale = (req.headers['accept-language'] || '').substring(0, 2);

    if(!languages.includes(userLocale)) {
      userLocale = 'en';
    }

    if (locale !== userLocale) {
      res.redirect(userLocale + req.url);
    }
  });

  return server;
}

function run() {
  app().listen(4200, () => {
    console.log(`Node Express server listening on http://localhost:4200`);
  });
}

run();

【问题讨论】:

  • 请确保您安装了最新的 CLI 和 Firebase Function 版本,并尝试在部署命令中添加 --debug 标志,以便我们了解部署失败的原因,然后编辑帖子相关日志。

标签: node.js angular firebase express google-cloud-functions


【解决方案1】:

我对 NextJS 和 firebase 函数也有同样的问题,

这是我的解决方案:

  1. 删除 node_modules 并运行 npm i
  2. 删除 缓存文件、out 或 公共构建
  3. 从 Firebase 面板检查功能控制台注册表(您可以在此处检查您的服务状态/日志)

我希望这对某人有所帮助。

【讨论】:

  • 在哪里可以找到这些缓存文件?在谷歌云控制台上?
【解决方案2】:

我减少了我的部署规模,它立即解决了这个问题。我想说你只需要优化你拥有的文件,或者考虑将一些文件存储在 firebase 函数代码库以外的其他位置(可能是 firebase 存储)

【讨论】:

  • 就我而言,我不小心在functions 目录中添加了一个大型媒体文件,增加了代码库大小。
【解决方案3】:

我遇到了这个问题,只是能够解决它。在我的情况下,我已经多次部署到 firebase 并且每次部署上传目录都变得越来越大。我最终更改了我的托管设置,只保留最后 3 个部署,一旦删除以前的部署,我的包大小从大约 170MB 下降到 15MB。由于某种原因,每次部署都会在尝试上传对我来说没有意义的新版本时在之前的每次部署中进行。

【讨论】:

    猜你喜欢
    • 2018-03-30
    • 2019-11-05
    • 1970-01-01
    • 2019-03-30
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多