Хостинг Angular (9) универсальное приложение SSR на Firebase | Обновить страницу => Ошибка 403 - PullRequest
0 голосов
/ 09 марта 2020

У меня есть приложение Angular 9, и я сгенерирую универсальный файл с помощью "@ ng-toolkit / universal". Создание и обслуживание локального приложения - не проблема, и все работает нормально. Я пытался развернуть приложение ssr на хостинге Firebase с помощью функции (версия узла 10), как описано в этом учебном пособии (метод 2). Развертывание работает нормально, но если я Перезагрузите страницу, я попадаю на страницу входа в учетную запись Google, а затем 403 http error . Проблема всегда возникает только с подчиненными. Например, www.test.com/page1. На самом деле функция хостинга должна обрабатывать все входящие пути, но это работает только с путем root.

firebase. json:

  "hosting": {
    "public": "public/browser",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "function": "ssr"
      }
    ]
  },

functions / index.ts (функция, обрабатывающая запросы http)

import * as functions from 'firebase-functions';
const universal = require(`${process.cwd()}/dist/server/main`).app();
export const ssr = functions.runWith({memory: '512MB'}).region('europe-west1').https.onRequest(universal);

functions / tsconfig. json

{
  "compilerOptions": {
    "module": "commonjs",
    "noImplicitReturns": true,
    "noUnusedLocals": true,
    "outDir": "lib",
    "sourceMap": true,
    "strict": true,
    "target": "ESNext",
    "baseUrl": ".",
  },
  "dependencies": {
    "escape-html": "^1.0.3"
  },
  "compileOnSave": true,
  "include": [
    "src"
  ]
}

functions / package. json

{
  "name": "functions",
  "scripts": {
    "lint": "tslint --project tsconfig.json",
    "build": "node cp-angular && tsc",
    "serve": "npm run build && firebase serve --only functions",
    "shell": "npm run build && firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "engines": {
    "node": "10"
  },
  "main": "lib/index.js",
  "dependencies": {
    "@sendgrid/mail": "^6.4.0",
    "cors": "^2.8.5",
    "firebase-admin": "^8.9.0",
    "firebase-functions": "^3.1.0",
    "fs-extra": "^8.1.0",
    "moment": "^2.24.0"
  },
  "devDependencies": {
    "tslint": "^5.12.0",
    "typescript": "^3.2.2"
  },
  "private": true
}

Папка Firebase Functions включает в себя каталог / dist / server, который содержит основной файл. js с ssrApp, созданным Angular универсальный. Папка publi c проекта Firebase также содержит приложение Angular без компиляции ssr.

Мне также интересно, можно ли настроить, будет ли приложение ssr вызываться только на определенных путях, а обычное клиентское приложение на других путях. Или лучшее решение для размещения приложения ssr. Это моя первая попытка с Angular universal и размещением приложения ssr. К сожалению, я попробовал все в учебниках, и ничто не решило мою проблему. Я надеюсь, что один из вас может помочь мне.

Если требуется несколько файлов. Пожалуйста, дайте мне знать, и я добавлю их.

...