我的目标是拥有动态playersIdsObservable
.distinct()
.toFlowable(BackpressureStrategy.BUFFER)
.flatMapSingle(playerId ->
dao.players().loadPlayerSRx(playerId), false, maxConcurrency)
标记,可以通过facebook抓取工具查看。通过做一些研究,我认为最好的(也可能是唯一的)方法是在服务器上预呈现我的应用程序。但是我在这方面遇到了问题。
我已经有一个现有的Node.js服务器,它看起来与大多数在线指南中的服务器略有不同。
og:
我尝试过使用prerender.io。我获得了一个API密钥,安装了const express = require('express');
const bodyParser = require('body-parser');
const path = require('path');
const http = require('http');
const app = express();
// Api for retrieving data from DB
const api = require('./server/api');
// Parsers
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
// Angular DIST folder
app.use(express.static(path.join(__dirname, 'dist')));
// Api location
app.use('/api', api);
// Send all other requests to the Angular app
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'dist/index.html'))
})
// Set Port
const port = process.env.PORT || '3040';
app.set('port', port);
const server = http.createServer(app)
server.listen(port, () => console.log('Magic happens on localhost:' + port));
并在将请求重定向到index.html之前将其设置为正确:
prerender-node
我还将此添加到我的index.html:
app.use(require('prerender-node').set('prerenderToken', 'my-token'));
// Send all other requests to the Angular app
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'dist/index.html'))
})
没有任何改变。也许我还需要做些什么才能让它发挥作用?同样,我的目标是拥有动态<meta name="fragment" content="!">
标签,可以通过facebook抓取工具查看。
其他信息:目前,我使用Angular 4附带的Meta服务设置元标记,如果重要的话。
修改 如果有人想要测试演示链接:http://aramet.demo.cdots.bg/news-preview/1
答案 0 :(得分:0)
你可以尝试移动:
app.use(require('prerender-node').set('prerenderToken', 'my-token'));
在静态文件行上方,如:
app.use(require('prerender-node').set('prerenderToken', 'my-token'));
// Angular DIST folder
app.use(express.static(path.join(__dirname, 'dist')));
由于您的index.html文件位于dist文件夹中,并且您正在从dist文件夹中提供静态文件,我想知道静态调用是否以某种方式为您的index.html文件提供服务。