prerender.io 使用本机 Node.js



我试图为在本机 Node.js 服务器上运行的 Angular 1.6.0 应用程序实现 prerender.io

设置中间件的文档使用了连接中间件,并特别引用了 Express.js

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

我没有使用 Express,也没有使用 Connect 中间件来运行我的服务器。

我的服务器.js如下:

var app = http.createServer(function(req, res){
var filePath = './debug/index.html'; 
var uri = req.url;
// Load index.html only when uri is not referencing a sub-directory of ./www (and is thus a URL)
for(i in dir){
if(uri.includes('/'+dir[i])) {
filePath = './debug'+uri;
break;
}
} 
fs.exists(filePath, function(exists) {
if(exists){
fs.readFile(filePath, function(err, html) {
if(err){ res.writeHead(500); res.end(); } 
else {        
var ext = path.extname(filePath);
var contentType = 'text/html';
switch(ext) {
case '.js':
contentType = 'text/javascript';
break;
case '.css':
contentType = 'text/css';
break;
case '.jpg':
contentType = 'image/jpeg';
break;
case '.png':
contentType = 'image/png';
break;
case '.svg':
contentType = 'image/svg+xml';
break;
case '.pdf':
contentType = 'application/pdf';
break;
default: contentType = 'text/html';
}
res.writeHead(200, { 'Content-Type': contentType });
res.end(html, 'utf-8');
}
});
} else {
res.writeHead(404);
res.end();
}
});   
}).listen(port, function(){
console.log('server is running on port '+port);
});

1) 如何使用此配置实现 prerender.io?

2)我确实安装了Connect并尝试实现中间件,如下所示:

var conn = connect();
conn.use(require('prerender-node').set('prerenderServiceUrl','http://localhost:3000/').set('prerenderToken', 'lqnF62jXABouJiFA2SuA'));

我只是在上面的服务器代码之后附加了它。

我没有收到任何错误,但在运行node server后,我在 localhost:3000 上看不到任何内容。虽然,我的应用程序在本地主机上运行良好:8080

如何在此服务器上设置 prerender.io?

你可以做如下的事情,但我建议将每个函数分解成自己的函数,以防止所有回调。只是想不理会代码,以便您可以看到它被更改的位置。

var prerender = require('prerender-node').set('prerenderToken', 'TOKEN');
var app = http.createServer(function(req, res){
prerender(req, res, function() {
var filePath = './debug/index.html'; 
var uri = req.url;
// Load index.html only when uri is not referencing a sub-directory of ./www (and is thus a URL)
for(i in dir){
if(uri.includes('/'+dir[i])) {
filePath = './debug'+uri;
break;
}
} 
fs.exists(filePath, function(exists) {
if(exists){
fs.readFile(filePath, function(err, html) {
if(err){ res.writeHead(500); res.end(); } 
else {        
var ext = path.extname(filePath);
var contentType = 'text/html';
switch(ext) {
case '.js':
contentType = 'text/javascript';
break;
case '.css':
contentType = 'text/css';
break;
case '.jpg':
contentType = 'image/jpeg';
break;
case '.png':
contentType = 'image/png';
break;
case '.svg':
contentType = 'image/svg+xml';
break;
case '.pdf':
contentType = 'application/pdf';
break;
default: contentType = 'text/html';
}
res.writeHead(200, { 'Content-Type': contentType });
res.end(html, 'utf-8');
}
});
} else {
res.writeHead(404);
res.end();
}
});   
});
}).listen(port, function(){
console.log('server is running on port '+port);
});

至于您的第二个问题,您可能已正确安装它。如果转到以下位置,是否会在预呈现服务器控制台上看到请求:

http://localhost:8080/?_escaped_fragment_=

最新更新