Prerender.io没有缓存页面

时间:2014-01-27 08:26:04

标签: node.js angularjs express seo prerender

我用AngularJS制作了一个带有expressJS后端的应用程序。现在我想让它可抓取,我发现prerender.io。我认为我已经完成了所有正确的bur,因为某些原因我在预渲染仪表板中看不到任何统计信息。

在我的app.configure函数中,我已经包含了如下标记:

app.use(require('prerender-node').set('prerenderToken', 'my-token'));

在我的HTML中,我已经包含了元片段标记:

<meta name="fragment" content="!">

我做的最后一件事是告诉AngularJS使用hashprefix:

$locationProvider.html5Mode(false);
$locationProvider.hashPrefix('!');

但出于某种原因,如果我参考文档,我将无法获得正确的结果。下面你可以看到它应该做什么:

  

Google向您的服务器发送请求,如下所示:

     

http://www.example.com/?_escaped_fragment_=/user/123

     

你将网址改回来:

     

http://www.example.com/#!/user/123

出于某种原因,如果我尝试这个,它仍然会添加#!标志添加了URL的结尾,所以如果我请求我的应用程序的URL像谷歌我得到这个:

  

http://www.my-website.com/?_escaped_fragment_=#!/home

因此它不会替换url中的哈希值。我认为这是我的问题的原因。

提前致谢!

编辑 - 如果我例如添加一条额外的路线,那么它可以工作:

app.get('/', function (req, res) {
    res.sendfile('./public/index.html'); 
});

app.get('/test', function (req, res) {
    res.sendfile('./public/index.html'); 
});

'/'路由不起作用'/test'路线确实有效。

1 个答案:

答案 0 :(得分:3)

好的我解决了我的问题。从未调用'/'路由,因为我的webpublic文件夹中有一个index.html文件。我将其重命名为public.html并更改了'/'路由以获取此文件而不是index.html文件。

app.get('/', function (req, res) {
    res.sendfile('./public/public.html');
});