Я нашел решение для проблемы.
Чтобы решить проблему:
1 - Нет проблем, когда я использую какие-либо обещания в своем коде.2- Нет проблем, когда я использую angularfire-lite.
Так что есть 2 решения: 1- Использование angularfire-lite
2- Использование кода node.js для серверной версииприложение.Я имею в виду файл "server.js" или "server.ts".
Я использую javascript для своего файла "server".Поэтому я могу добавить код node.js в server.js для обновления тегов og.Для этого первым шагом является создание serve.js.Затем найдите, куда вы хотите добавить мета-теги.А потом развернуть.Вот и все.В результате получается что-то вроде этого.
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.database();
/*<<-Just for ssr*/
var SeoServiceService = /** @class */ (function () {
function SeoServiceService(titleService, meta, router) {
this.titleService = titleService;
this.meta = meta;
this.router = router;
}
SeoServiceService.prototype.generateTags = function (config) {
console.log('Client Side');
/*Just for ssr->>*/
return db.ref('test/ssr').on('value',(snapshot)=>{
console.log('Server Side');
this.meta.updateTag({ property: 'og:title', content: 'It works :)' });
return true
});
/*Just for ssr->>*/
console.log('Client Side');
};
SeoServiceService.ngInjectableDef = i0.defineInjectable({ factory: function SeoServiceService_Factory() { return new SeoServiceService(i0.inject(i1.Title), i0.inject(i1.Meta), i0.inject(i2.Router)); }, token: SeoServiceService, providedIn: "root" });
return SeoServiceService;
}());
«Server.js» - это большой и сложный файл.Трудно найти, где вы должны добавить свой код node.js.Одним из решений является добавление вашего node.js в качестве комментария к угловому коду.После создания 'server.js' просто найдите этот комментарий и сделайте его работоспособным.Например, мой угловой код приведен ниже.И окончательный результат выше кода.
import { Injectable } from '@angular/core';
import { Title, Meta } from '@angular/platform-browser';
import { Router } from '@angular/router';
/*Just for ssr->>*/
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.database();
/*<<-Just for ssr*/
@Injectable({
providedIn: 'root'
})
export class SeoServiceService {
constructor(
private titleService: Title,
private meta: Meta,
private router: Router,
) { }
generateTags(config) {
console.log('Client Side');
/*Just for ssr->>
return db.ref('test/ssr').on('value',(snapshot)=>{
console.log('Server Side');
this.meta.updateTag({ property: 'og:title', content: 'It works :)' });
return true
});
Just for ssr->>*/
console.log('Client Side');
}}