Проблема с тегами og при использовании angular6 и @ ng-toolkit / universal

Локальная переменная - это память в стеке, эта память автоматически недействительна при выходе из области видимости. Из функции, более глубокой вложенной (выше в стеке в памяти), ее совершенно безопасно для доступа к этой памяти.

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

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

Даже может случиться, что вы снова достигнете той же части программы и перезапишите свою старую локальную функциональную переменную с новой функциональной переменной. Все это очень опасно и должно быть сильно обескуражено. Не используйте указатели на локальные объекты!

-1
задан Max Hesari 1 March 2019 в 01:22
поделиться

1 ответ

Я нашел решение этой проблемы.

Чтобы решить проблему:

1- Нет проблем, когда я использую какие-либо обещания в своем коде. 2. Нет проблем, когда я использую angularfire-lite.

Таким образом, есть 2 решения: 1- Использование angularfire-lite

2- Использование кода node.js для серверной версии приложения. Я имею в виду файл "server.js" или "server.ts".

Я использую JavaScript для моего «серверного» файла. Поэтому я могу добавить код 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');

}}

0
ответ дан Max Hesari 1 March 2019 в 01:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: