Nodejs博客重构上线,欢迎吐槽

Nodejs博客重构上线,欢迎吐槽

捣腾了估计也有一个月的时间,终于把自己之前的站点用Node重构了,这几天才部署完上线,测试地址是: <a href=“http://115.28.230.117” target="_blank">http://115.28.230.117</a>

主要功能如下: 1、tag标签页面(标签云) 2、分类功能 2、RSS订阅功能 3、留言评论功能 4、点赞功能 5、模糊搜索功能 6、瀑布流加载文章列表 …等等 欢迎各路好汉前来吐槽…


25 回复

Nodejs博客重构上线,欢迎吐槽

经过大概一个月的开发与调试,我终于完成了自己的博客站点的重构工作,并成功上线。这几天主要是进行了一些最后的测试,现在可以正式宣布新版本上线了!测试地址是:

<a href="http://115.28.230.117" target="_blank">http://115.28.230.117</a>

主要功能介绍

以下是新版本的一些主要功能:

  1. Tag标签页面(标签云)

    • 使用标签云来展示所有标签,方便用户快速找到感兴趣的文章。
    • 示例代码:
      app.get('/tags/:tag', (req, res) => {
        const tag = req.params.tag;
        // 假设db是数据库连接对象
        db.collection('posts').find({ tags: tag }).toArray((err, docs) => {
          if (err) return res.status(500).send(err);
          res.render('tag', { tag, posts: docs });
        });
      });
      
  2. 分类功能

    • 用户可以根据分类浏览文章,提高阅读体验。
    • 示例代码:
      app.get('/category/:category', (req, res) => {
        const category = req.params.category;
        db.collection('posts').find({ category }).toArray((err, docs) => {
          if (err) return res.status(500).send(err);
          res.render('category', { category, posts: docs });
        });
      });
      
  3. RSS订阅功能

    • 提供RSS订阅功能,让用户通过RSS阅读器获取最新的文章更新。
    • 示例代码:
      app.get('/rss', (req, res) => {
        db.collection('posts').find().sort({ date: -1 }).limit(10).toArray((err, docs) => {
          if (err) return res.status(500).send(err);
          const rssFeed = new RSSFeed({
            title: 'My Blog',
            description: '个人博客',
            site_url: 'http://115.28.230.117',
            feed_url: 'http://115.28.230.117/rss',
          });
          docs.forEach(post => {
            rssFeed.item({
              title: post.title,
              url: `http://115.28.230.117/post/${post._id}`,
              date: post.date,
            });
          });
          res.send(rssFeed.render());
        });
      });
      
  4. 留言评论功能

    • 用户可以在每篇文章下方留言评论,增加互动性。
    • 示例代码:
      app.post('/comments', (req, res) => {
        const comment = req.body;
        db.collection('comments').insertOne(comment, (err, result) => {
          if (err) return res.status(500).send(err);
          res.redirect(`/post/${comment.postId}`);
        });
      });
      
  5. 点赞功能

    • 用户可以对文章进行点赞操作,增加文章热度。
    • 示例代码:
      app.post('/like/:postId', (req, res) => {
        const postId = req.params.postId;
        db.collection('posts').updateOne(
          { _id: ObjectId(postId) },
          { $inc: { likes: 1 } }
        );
        res.redirect(`/post/${postId}`);
      });
      
  6. 模糊搜索功能

    • 用户可以通过关键词进行模糊搜索,快速找到想要的文章。
    • 示例代码:
      app.post('/search', (req, res) => {
        const keyword = req.body.keyword;
        db.collection('posts').find({ $text: { $search: keyword } }).toArray((err, docs) => {
          if (err) return res.status(500).send(err);
          res.render('search', { keyword, posts: docs });
        });
      });
      
  7. 瀑布流加载文章列表

    • 使用瀑布流布局加载文章列表,提高用户体验。
    • 示例代码:
      app.get('/articles', (req, res) => {
        db.collection('posts').find().sort({ date: -1 }).toArray((err, docs) => {
          if (err) return res.status(500).send(err);
          res.render('articles', { posts: docs });
        });
      });
      

欢迎大家试用并提出宝贵的意见和建议,期待您的反馈!


以上就是本次博客重构的主要功能介绍,希望您喜欢新的版本!


不错不错

看着很吊的样子。不知道。。。能开源不

专业点叫瀑布流,你的个人观点估计要让很多人吐槽

开源是一定的,现在还有许多功能和bug在处理,搞定就开源出来

想问下模糊搜索的解决方案 刚好在做这个

很不错

前端页面完全就是腾讯的 ISUX : http://isux.tencent.com/ 就感觉那个瀑布流向下拉不到尽头 很恶心 可以来个按钮上面的都好点

感觉很简洁,赞一下

好厉害!好好学习一下!

是的啊,界面基本上是用的isux的外观,没办法,不会美工啊,至于你说瀑布流恶心,各位去见仁见智吧

有github地址么

没,代码还在整理中,后续开源

界面很好看啊,可是为什么标签云我死活点不中啊~

8错~非常干净

哈哈,这个是个bug,确实难点,要有技巧的点,嘿嘿,打算取消这种滚动的标签云特效

有意思 顶 owen 原来你还写了这么多文章啊

终于注册上了,这个是第一个回复,楼主好历害

不错啦!还是比较喜欢,希望能开源来出来学习下!

不错,希望尽快开源。刚加入学习nodejs的大军,哪里可以找到初学者的小demo啊?

主职:F2E,副职业:各种瞎搞Node,PHP

《node开发指南》入门不错,可以去看看

感谢大家的关注!这次重构使用了最新的Node.js技术栈,整体架构更加现代化,提升了性能和可维护性。以下是一些关键部分的实现代码示例及简要说明:

示例代码:标签云(Tag Cloud)

// 定义标签路由
const express = require('express');
const router = express.Router();
const { getTags } = require('../controllers/tagController');

router.get('/tags', getTags);

module.exports = router;

// 控制器逻辑
exports.getTags = async (req, res) => {
  try {
    const tags = await Tag.find().lean(); // 假设使用mongoose
    res.json(tags);
  } catch (error) {
    console.error(error);
    res.status(500).send('Server Error');
  }
};

示例代码:分类功能

// 分类路由定义
const router = express.Router();
const { getCategoryPosts } = require('../controllers/categoryController');

router.get('/category/:name', getCategoryPosts);

// 控制器逻辑
exports.getCategoryPosts = async (req, res) => {
  try {
    const posts = await Post.find({ category: req.params.name }).lean();
    res.json(posts);
  } catch (error) {
    console.error(error);
    res.status(500).send('Server Error');
  }
};

示例代码:瀑布流加载文章列表

// 使用无限滚动的前端逻辑
document.addEventListener("scroll", () => {
  if (window.scrollY + window.innerHeight >= document.documentElement.scrollHeight) {
    fetch('/load-more-posts')
      .then(response => response.json())
      .then(data => {
        data.forEach(post => {
          const postElement = createPostElement(post);
          document.getElementById('post-list').appendChild(postElement);
        });
      });
  }
});

示例代码:留言评论功能

// 后端路由
const router = express.Router();
const { addComment } = require('../controllers/commentController');

router.post('/add-comment', addComment);

// 控制器逻辑
exports.addComment = async (req, res) => {
  try {
    const newComment = new Comment(req.body);
    await newComment.save();
    res.status(201).json(newComment);
  } catch (error) {
    console.error(error);
    res.status(500).send('Server Error');
  }
};

以上只是几个示例,实际项目中还有更多的细节需要处理,如用户认证、数据验证等。欢迎大家提出宝贵的意见和建议,我会不断改进!

回到顶部