index.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. var express = require('express');
  2. var router = express.Router();
  3. //数据库操作对象
  4. var DbOpt = require("../models/Dbopt");
  5. // 文档对象
  6. var Content = require("../models/Content");
  7. //文章类别对象
  8. var ContentCategory = require("../models/ContentCategory");
  9. //短id
  10. var shortid = require('shortid');
  11. //校验
  12. var validator = require("validator");
  13. //时间格式化
  14. var moment = require('moment');
  15. //站点配置
  16. var settings = require("../models/db/settings");
  17. var siteFunc = require("../models/db/siteFunc");
  18. var url = require('url');
  19. //缓存
  20. var cache = require('../util/cache');
  21. /* GET home page. */
  22. router.get('/', function (req, res, next) {
  23. siteFunc.renderToTargetPageByType(req,res,'index');
  24. });
  25. //缓存站点地图
  26. router.get("/sitemap.html", function (req, res, next) {
  27. var siteMapNeedData;
  28. cache.get(settings.session_secret + '_siteMapHtml',function(siteMapHtml){
  29. if(siteMapHtml) {
  30. siteMapNeedData = siteMapHtml;
  31. siteFunc.renderToTargetPageByType(req,res,'sitemap',{docs : siteMapNeedData});
  32. }else{
  33. Content.find({'type': 'content','state' : true},'title',function(err,docs){
  34. if(err){
  35. res.end(err);
  36. }else{
  37. siteMapNeedData = docs;
  38. cache.set(settings.session_secret + '_siteMapHtml', docs, 1000 * 60 * 60 * 24); // 缓存一天
  39. siteFunc.renderToTargetPageByType(req,res,'sitemap',{docs : siteMapNeedData});
  40. }
  41. })
  42. }
  43. });
  44. });
  45. //文档详情页面
  46. router.get('/details/:url', function (req, res, next) {
  47. var url = req.params.url;
  48. var currentId = url.split('.')[0];
  49. if(shortid.isValid(currentId)){
  50. Content.findOne({ '_id': currentId , 'state' : true}).populate('category').populate('author').exec(function(err,result){
  51. if (err) {
  52. console.log(err)
  53. } else {
  54. if (result) {
  55. // 更新访问量
  56. result.clickNum = result.clickNum + 1;
  57. result.save(function(){
  58. var cateParentId = result.sortPath.split(',')[1];
  59. var cateQuery = {'sortPath': { $regex: new RegExp(cateParentId, 'i') }};
  60. siteFunc.getContentsCount(req,res,cateParentId,cateQuery,function(count){
  61. siteFunc.renderToTargetPageByType(req,res,'detail',{count : count, cateQuery : cateQuery, detail : result});
  62. });
  63. })
  64. } else {
  65. siteFunc.renderToTargetPageByType(req,res,'error',{info : '非法操作!',message : settings.system_illegal_param, page : 'do404'});
  66. }
  67. }
  68. });
  69. }else{
  70. siteFunc.renderToTargetPageByType(req,res,'error',{info : '非法操作!',message : settings.system_illegal_param , page : 'do500'});
  71. }
  72. });
  73. //分类列表页面 http://127.0.0.1/DoraCms___VylIn1IU-1.html
  74. router.get('/:defaultUrl', function (req, res, next) {
  75. var defaultUrl = req.params.defaultUrl;
  76. var url = defaultUrl.split('___')[1];
  77. var indexUrl = defaultUrl.split('—')[0];
  78. if (indexUrl == 'page') { // 首页的分页
  79. var indexPage = defaultUrl.split('—')[1].split(".")[0];
  80. if(indexPage && validator.isNumeric(indexPage)){
  81. req.query.page = indexPage;
  82. }
  83. siteFunc.renderToTargetPageByType(req,res,'index');
  84. } else {
  85. var currentUrl = url;
  86. if (url) {
  87. if(url.indexOf("—") >= 0){
  88. currentUrl = url.split("—")[0];
  89. var catePageNo = (url.split("—")[1]).split(".")[0];
  90. if(catePageNo && validator.isNumeric(catePageNo)){
  91. req.query.page = catePageNo;
  92. }
  93. }
  94. queryCatePage(req, res, currentUrl);
  95. }else{
  96. next();
  97. }
  98. }
  99. });
  100. //分类列表页面 http://127.0.0.1/front-development/AngluarJs___EyW7kj6w
  101. router.get('/:forder/:defaultUrl', function (req, res, next) {
  102. var defaultUrl = req.params.defaultUrl;
  103. var url = defaultUrl.split('___')[1];
  104. var currentUrl = url;
  105. if (url) {
  106. if(url.indexOf("—") >= 0){
  107. currentUrl = url.split("—")[0];
  108. var catePageNo = (url.split("—")[1]).split(".")[0];
  109. if(catePageNo && validator.isNumeric(catePageNo)){
  110. req.query.page = catePageNo;
  111. }
  112. }
  113. queryCatePage(req, res, currentUrl);
  114. }else{
  115. next();
  116. }
  117. });
  118. //分类页面路由设置
  119. function queryCatePage(req, res, cateId) {
  120. if(shortid.isValid(cateId)){
  121. ContentCategory.findOne({"_id": cateId}).populate('contentTemp').exec(function(err,result){
  122. if (err) {
  123. siteFunc.renderToTargetPageByType(req,res,'error',{info : '页面未找到!',message : err.message, page : 'do500'});
  124. } else {
  125. if (result) {
  126. var contentQuery = {'sortPath': { $regex: new RegExp(result._id, 'i') },'state' : true};
  127. var cateParentId = result.sortPath.split(',')[1];
  128. var cateQuery = {'sortPath': { $regex: new RegExp(cateParentId, 'i') }};
  129. siteFunc.renderToTargetPageByType(req,res,'contentList',{contentQuery : contentQuery,cateQuery : cateQuery,result : result});
  130. }
  131. else {
  132. siteFunc.renderToTargetPageByType(req,res,'error',{info : '非法操作!',message : settings.system_illegal_param, page : 'do500'});
  133. }
  134. }
  135. });
  136. }else{
  137. siteFunc.renderToTargetPageByType(req,res,'error',{info : '非法操作!',message : settings.system_illegal_param, page : 'do500'});
  138. }
  139. }
  140. module.exports = router;