【问题标题】:AJAX Crawling with Express on static routes在静态路由上使用 Express 进行 AJAX 爬行
【发布时间】:2011-12-17 19:13:17
【问题描述】:

我有一个静态路由

/public/slides/lecture1.html#!3

显示 Lecture1.html 的第三个 div 元素(其他 div HTML 元素将有 display:none;)。

我使用 Express app.use(express.static(WEBROOT));,一切正常。但我希望能够使该幻灯片 AJAX Crawable,所以我想根据请求做出反应,如下所示:

/public/slides/lecture1.html?_escaped_fragment_=3

并返回只有一个 div 元素的单页 - 以便 Google 可以正确索引 Lecture1.html 中幻灯片 3 中的文本。

如何使用 Express 做到这一点?

是否可以在 express.static 已经提供服务的链接上添加 GET 请求处理程序?

谢谢

【问题讨论】:

    标签: ajax node.js express


    【解决方案1】:

    您可以使用 req.query 属性来访问快速请求中的查询字符串。

    【讨论】:

      【解决方案2】:

      正如我们在 IRC 上讨论的,这不属于“静态路由”类别(我的意思是您不会使用 express.static 来提供此服务)。

      您要做的是创建一个 Express 路由并根据您的查询变量呈现该文件:

      app.get('/lecture1.html', function (req, res) {
        if (req.query._escaped_fragment_ == 3) { 
          // .. do something..
        } else {
          // render lecture1.html here
          // you can just rename the file lecture1.ejs
          // move it to the views directory
          // and then render it like res.render('lecture1.ejs');
        }
      });
      

      【讨论】:

      • 谢谢,这就是我的意思。解决方案是在其他处理程序之后移动静态处理程序。然后我可以检查是否有片段,如果没有,则 next(); 静态提供文件。
      【解决方案3】:

      查看https://github.com/OptimalBits/Crawlme。它是一个快速中间件,可以自动处理这个问题。只需这样做,您就可以进行 ajax 抓取:

      var
        express = require('express'),
        http = require('http'),
        crawlme = require('crawlme');
      
      var app = express()
        .use(crawlme())
        .use(express.static(__dirname + '/webroot'));
      
      http.createServer(app).listen(80);
      

      【讨论】:

        猜你喜欢
        • 2018-11-04
        • 2012-07-19
        • 1970-01-01
        • 2020-10-31
        • 2015-01-30
        • 1970-01-01
        • 1970-01-01
        • 2018-04-29
        • 1970-01-01
        相关资源
        最近更新 更多