在现有的Node.js服务器上预呈现Angular应用程序

时间:2018-01-26 11:26:13

标签: javascript node.js angular facebook prerender

我的目标是拥有动态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

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文件提供服务。