2017-08-28 51 views
0

我试着去实现prerender.io对于本机的Node.js服务器上运行我的角度1.6.0应用prerender.io与当地的Node.js

设立中间件的文档利用了connect middleware和具体列举Express.js

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

我不使用Express和未使用连接中间件运行我的服务器。

我server.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?

回答

0

你可能会做类似于下面的事情,但我建议将每个函数分解到它自己的函数中以防止所有的回调。只想保留代码,以便可以看到它发生了什么变化。

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_=