Facebook的OG元与angular和节点

我试图让我的angular度/节点应用程序呈现dynamic打开图元内容。

我一直在试图按照这个教程http://www.codewarmer.com/posts/1394433236-configure-angularjs-nodejs-for-search-bots# !

我有一些与幻像工作与节点的问题,我的问题似乎是类似于这个错误消息,当使用PhantomJS,随机间隔rest

除了我的错误不会随机发生,它总是发生。

编辑:这是我的代码

在我的server.js中,我需要一个基于上面调用PhantomHandler.js的tut创build的模块,它被这样调用。

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 modules\node_modules\phantom\phantom.js:150:28) at ChildProcess.emit (events.js:98:17) at Process.ChildProcess._handle.onexit (child_process.js:809:12) 

我的问题:这是最好的最简单的方法来获得angular色与Facebook OG很好地发挥? 如果是任何人都可以确认他们是否设法得到这个技巧,就像上面描述的那样,用虚幻的方式抛出断言错误。

这似乎应该是一个相对普遍的工作,我很惊讶,我没有find一个很好的直接教程如何得到这个工作,除非我只是没有看好:s

谢谢

好的,

因为我的问题基本上是“什么是最好的方式来获得angular和节点响应Facebook与正确的页面元”。 我现在可以发表我的答案了。

  1. 如上所述,我认为使用上面描述的phantom.js方法需要安装phantom并在node.js服务器上作为单独的进程运行。 (任何人都可以确认或否认这一点?)

  2. 对于我的情况,我只想要一个用户能够从网站发布到Facebook和Facebook的链接,使用开放graphics元返回一个漂亮的链接。

考虑到这一点,我决定跳过上面教程的解决scheme中的phantom.js步骤。 相反,我推出了一些代码,当用户点击一个页面时,本质上将一个HTML片段保存到数据库中。 HTML片段只包含我需要的Facebook元标记。 然后,我使用上述教程的最后一部分将Facebook机器人导向到我保存的HTML代码片段。

它似乎工作得很好。