prerender.io无法与expressjs和angularjs一起使用

时间:2019-02-27 16:56:42

标签: node.js angularjs prerender

我已经使用Express.js设置了服务器:

const env = process.env.ENV || 'PROD';
const port = process.env.PORT || 8080;
const express = require('express');
const app = express();

if(env === 'PROD') {
    app.all('*', function(req, res, next) {
        var protocol = req.headers['x-forwarded-proto'];
        if(protocol && protocol === 'http') {
            res.redirect(301, 'https://' + req.headers.host + req.url);
        }
        return next();
    });
}

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

app.use(express.static(__dirname + '/app/'));

app.get('*', function(req, res){
    res.sendFile(__dirname + '/app/index.html');
});

app.listen(port);
console.log("App started on port "+port);

在angularjs应用程序中设置配置:

config(['$locationProvider', '$routeProvider', function ($locationProvider, $routeProvider) {
    $locationProvider.html5Mode(true);
}])

在index.html中:

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

如文档所述: https://prerender.io/documentation/test-it

我这样做:

http://mydomainm/user/1?_escaped_fragment_=

但是我的页面没有被缓存。 enter image description here

2 个答案:

答案 0 :(得分:0)

看起来应该可以正常工作。您可以发送电子邮件至support@prerender.io,以便我们检查您的抓取统计信息并进行一些测试吗?谢谢!

答案 1 :(得分:0)

因此,看起来中间件工作正常,但是您向我们发送了一个http URL,因此我们返回了301。您能否将中间件修改为如下所示:

app.use(require('prerender-node').set('prerenderToken', 'mytoken').set('protocol', 'https'));

这应该可以解决该重定向问题,并使一切正常运行。