首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在express js中构建站点地图?

如何在express js中构建站点地图?
EN

Stack Overflow用户
提问于 2014-11-27 11:29:37
回答 1查看 2.3K关注 0票数 2

我正在尝试使用位于https://www.npmjs.org/package/sitemap的sitemap.js包

我可以在站点地图中推送urls。但是我想根据我从mongodb检索到的数据来添加url。我知道如何创建url来提供站点地图,但因为从mongo中查找数据是一个回调,在我获得数据之前,/sitemap.xml的路由器被调用,所以我无法向站点地图提供更多的url。

这是我的路径文件的快照

代码语言:javascript
复制
var colors = require('colors'); 
var mongoose = require('mongoose');
var express = require('express');
var router = express.Router();
var sm = require('sitemap');
var _ = require('underscore');

//these models are found in the /models folder
var Post = mongoose.model('Post');
var Comment = mongoose.model('Comment');


var trendSchema = mongoose.Schema({
    tName: String,
    tName_h: String,    
    region: String
  });

var Trend = mongoose.model('Trend', trendSchema);

// var Trend = mongoose.model('Trend'); 






console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');




var tfind = function  (trends) {
    Trend.find(function (err, trends) {
        if (err) {
            console.log(err);
            return next(err);
        }

    console.log('trends =', trends);
        var plucked = _.pluck(trends, 'tName');

        // console.log('plucked  trends',plucked);

        // console.log(' sitemap urls   = ', sitemap.urls);
        // sitemap.urls.length = 0;
        // sitemap.urls.push({ url: '/page-10/', changefreq: 'daily', priority: 0.3 });

    });
}


tfind.done(function (text) {
        console.log(' text   = ', text );
});




var sitemap = sm.createSitemap ({
      hostname: 'http://example.com',
      cacheTime: 600000,        // 600 sec - cache purge period
      urls: [
        { url: '/page-1/',  changefreq: 'daily', priority: 0.3 },
        { url: '/page-2/',  changefreq: 'monthly',  priority: 0.7 },
        { url: '/page-3/' }     // changefreq: 'weekly',  priority: 0.5
      ]
    });

router.get('/sitemap.xml', function(req, res) {
  sitemap.toXML( function (xml) {
      res.header('Content-Type', 'application/xml');
      res.send( xml );
  });
});



sitemap.urls.push({ url: '/page-5/', changefreq: 'daily', priority: 0.3 });
sitemap.urls.push({ url: '/page-7/', changefreq: 'daily', priority: 0.3 });
// sitemap.urls.push({ url: '/page-9/', changefreq: 'daily', priority: 0.3 });

console.log(' app.js  sitemap.urls == ', sitemap.urls);
EN

回答 1

Stack Overflow用户

发布于 2014-11-27 12:26:39

如果我正确理解您的问题,您希望在呈现响应的MongoDB文件之前将从XML获取的数据添加到您的站点地图中。

首先,Node.js是异步的,MongoDB驱动也是基于这一点的。因此,您的路由句柄应该在其中执行搜索,当mongo返回文档时,只有在您确定一切都已完成之后,才会发送回响应。

注意:为了简洁起见,我不在这里编写配置和错误处理程序。此外,请始终将expressjs配置放在模块导入的正下方。

代码语言:javascript
复制
var mongoose = require('mongoose');
.
.
var app = express();

// YOUR CONFIG SHOULD ALWAYS BE ON TOP

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
.
.

// YOUR CODE WAS MISSING A MONGODB CONNECTION SETUP
mongoose.connect('mongodb://localhost:27017/news', function () {
  console.log('Database Connected');
});

var sitemap = sm.createSitemap ({
  hostname: 'http://example.com',
  cacheTime: 600000,        // 600 sec - cache purge period
  urls: [
    { url: '/page-1/',  changefreq: 'daily', priority: 0.3 },
    { url: '/page-2/',  changefreq: 'monthly',  priority: 0.7 },
    { url: '/page-3/' }     // changefreq: 'weekly',  priority: 0.5
  ]
});

var trendSchema = mongoose.Schema({
  tName: String,
  tName_h: String,    
  region: String
});

var Trend = mongoose.model('Trend', trendSchema);

app.get('/sitemap.xml', function(req, res) {
  Trend.find(function (err, trends) {
    if (err) {
      console.log(err);
      return next(err);
    }
    trends.forEach(function(trend, index) {

      // Place your data extraction/insertion logic here
      sitemap.urls.push({ url: trend.tName, changefreq: 'daily', priority: 0.3 });

      if(index == trends.length-1) {
        sitemap.toXML( function (xml) {
          res.header('Content-Type', 'application/xml');
          res.send( xml );
        });
      }
    });
  });
});

var server = app.listen(3000, function() {
  console.log('Express server listening on port ' + server.address().port);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27162617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档