mirror of
https://github.com/cnodejs/nodeclub.git
synced 2025-12-08 19:55:55 +00:00
63 lines
1.6 KiB
JavaScript
63 lines
1.6 KiB
JavaScript
var config = require('../config');
|
|
var convert = require('data2xml')();
|
|
var Topic = require('../proxy').Topic;
|
|
var mcache = require('memory-cache');
|
|
var marked = require('marked');
|
|
|
|
marked.setOptions({
|
|
renderer: new marked.Renderer(),
|
|
gfm: true,
|
|
tables: true,
|
|
breaks: false,
|
|
pedantic: false,
|
|
sanitize: true,
|
|
smartLists: true,
|
|
smartypants: false
|
|
});
|
|
|
|
exports.index = function (req, res, next) {
|
|
if (!config.rss) {
|
|
res.statusCode = 404;
|
|
return res.send('Please set `rss` in config.js');
|
|
}
|
|
res.contentType('application/xml');
|
|
if (!config.debug && mcache.get('rss')) {
|
|
res.send(mcache.get('rss'));
|
|
} else {
|
|
var opt = { limit: config.rss.max_rss_items, sort: [
|
|
[ 'create_at', 'desc' ]
|
|
] };
|
|
Topic.getTopicsByQuery({}, opt, function (err, topics) {
|
|
if (err) {
|
|
return next(err);
|
|
}
|
|
var rss_obj = {
|
|
_attr: { version: '2.0' },
|
|
channel: {
|
|
title: config.rss.title,
|
|
link: config.rss.link,
|
|
language: config.rss.language,
|
|
description: config.rss.description,
|
|
item: []
|
|
},
|
|
};
|
|
|
|
topics.forEach(function (topic) {
|
|
rss_obj.channel.item.push({
|
|
title: topic.title,
|
|
link: config.rss.link + '/topic/' + topic._id,
|
|
guid: config.rss.link + '/topic/' + topic._id,
|
|
description: marked(topic.content),
|
|
author: topic.author.loginname,
|
|
pubDate: topic.create_at.toUTCString()
|
|
});
|
|
});
|
|
|
|
var rssContent = convert('rss', rss_obj);
|
|
|
|
mcache.put('rss', rssContent, 1000 * 60 * 5); // 五分钟
|
|
res.send(rssContent);
|
|
});
|
|
}
|
|
};
|