Facebook OG Meta with Angular and Node



我正在尝试让我的角度/节点应用程序呈现动态开放图元内容。

我一直在尝试按照本教程 http://www.codewarmer.com/posts/1394433236-configuring-angularjs-nodejs-for-search-bots#!

我在使用节点时遇到了一些问题,我的问题似乎类似于使用 PhantomJS 时的错误消息,以随机间隔中断

除了我的错误不是随机发生的,它一直在发生。

编辑:这是我的代码

在我的服务器中.js我需要基于上述 tut 创建的一个名为 PhantomHandler 的模块.js它是这样调用的。

var crawler = require('./modules/PhantomHandler');

这就是 PhantomHandler.js 的样子:

    var phantom = require('phantom');
var models = require('../models');
mongoose = require('mongoose');
Snapshot = models.Snapshot;
url = require('url');
var baseUrl = 'my url';
function crawlSite(idx, arr, page, callback) {
    crawlUrl(arr[idx], page, function(data) {
        data.links.forEach(function(link) {
            if (arr.indexOf(link) < 0)
                arr.push(link);
        });
        Snapshot.upsert(data);
        if (++idx === arr.length)
            callback();
        else
            crawlSite(idx, arr, page, callback);
    });
}
function startPhantom(cb) {
    phantom.create(function(ph) {
        phInstance = ph;
        ph.createPage(function(page) {
            phPage = page;
            cb(ph, page);
        });
    });
}
function crawlUrl(path, page, cb) {
    uri = url.resolve(baseUrl, path);
    page.open(uri, function(status) {
        var evaluateCb = function(result) {
            result.path = path;
            cb(result);
        };
        //Timeout 2000ms seems pretty enough for majority ajax apps
        setTimeout(function() {
            if (status == 'success')
                page.evaluate(function() {
                    var linkTags = document.querySelectorAll('a:not([rel="nofollow"])');
                    var links = [];
                    for (var i = 0, ln; ln = linkTags[i]; i++)
                        links.push(ln.getAttribute('href'));
                    return {
                        'links': links,
                        'html': document.documentElement.outerHTML
                    };
                }, evaluateCb);
        }, 2000);
    });
}
exports.crawlAll = function(callback) {
    startPhantom(function(ph, page) {
        crawlSite(0, ['/'], page, function() {
            ph.exit();
            callback();
        });
    });
};
exports.crawlOne = function(path, callback) {
    startPhantom(function(ph, page) {
        crawlUrl(path, page, function(data) {
            Snapshot.upsert(data);
            ph.exit();
            callback();
        });
    });
};

当我运行此代码时,我的确切错误是:

    phantom stderr: 'phantomjs' is not recognized as an internal or exte
,
operable program or batch file.

assert.js:92
  throw new assert.AssertionError({
        ^
AssertionError: abnormal phantomjs exit code: 1
    at Console.assert (console.js:102:23)
    at ChildProcess.<anonymous> (path to node modulesnode_modulesphantomphantom.js:150:28)
    at ChildProcess.emit (events.js:98:17)
    at Process.ChildProcess._handle.onexit (child_process.js:809:12)

我的问题:这是最好的最简单的方法,让有棱角的Facebook OG很好地玩吗?如果是,其他人可以确认他们是否设法让这种技术在没有幻影抛出断言错误的情况下工作,如上所述。

似乎这应该是一项相对常见的工作,我很惊讶我没有找到一个关于如何让它工作的很好的直接教程,除非我只是没有正确查看:s

谢谢

好的,

因为我的问题本质上是"让角度和节点用正确的页面元响应Facebook的最佳方法是什么"。我现在能够发表我对此的回答。

  1. 如上所述,我认为使用上述 phantom.js 方法需要安装幻像并在节点.js服务器上作为单独的进程运行。(谁能证实或否认这一点?

  2. 对于我的情况,我只是希望用户能够将网站的链接发布到Facebook上,并让Facebook使用打开的图形元返回一个漂亮的链接。

考虑到这一点,我决定跳过上面教程中解决方案中的幻影.js步骤。相反,我滚动了一些代码,这些代码本质上是在用户点击页面时将 HTML 片段保存到数据库中。HTML代码段只包含Facebook所需的元标记。然后,我使用上述教程的最后一部分将Facebook机器人定向到我保存的HTML代码段。

它似乎工作得很好。

最新更新