prerender.io 不使用 expressjs 和 angularjs

prerender.io not working with expressjs and angularjs

我已经设置了一个服务器 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_=

但是我的页面没有缓存。

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

看起来中间件工作正常,但您向我们发送了一个 http URL,所以我们返回了一个 301。您可以将您的中间件修改成这样吗:

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

这应该可以解决重定向问题并使一切正常工作。