学习NodeJs,练习做的blog,求各种拍砖

学习NodeJs,练习做的blog,求各种拍砖

自己学习Node写的BLOG。。。

参考了很多Nodeclub的东西,比如学习了Nodeclub中的Eventproxy来解决嵌套过深的问题

也参考了很多Node的源码

NAE地址:http://moblog.cnodejs.net/

Github地址:https://github.com/moskito518/moblog.git

请各位大神轻拍,多多指教。


16 回复

学习NodeJs,练习做的Blog,求各种拍砖

大家好,这是我最近使用Node.js学习并编写的一个Blog系统。在这个过程中,我参考了很多优秀的项目,比如Nodeclub,并从中学习到了很多有用的知识和技术。

技术栈

  • Node.js:后端开发的基础。
  • Express.js:一个简洁而灵活的Node.js Web应用框架。
  • MongoDB:作为数据存储。
  • EventProxy:用于解决异步回调嵌套过深的问题。

项目介绍

这个Blog系统实现了基本的功能,包括文章发布、分类管理、评论等。虽然功能简单,但我希望通过这个项目学习到更多关于Node.js和Web开发的知识。

关键技术点

  1. EventProxy:在处理异步操作时,避免了回调地狱(Callback Hell)。例如,在获取用户信息和文章列表时,可以这样使用:

    const EventProxy = require('eventproxy');
    
    app.get('/user/:id', function(req, res) {
        const ep = new EventProxy();
        
        ep.fail(res.error.bind(res));
        
        ep.all('user', 'posts', function(user, posts) {
            res.render('profile', {
                user: user,
                posts: posts
            });
        });
    
        User.findById(req.params.id, ep.done('user'));
        Post.find({ authorId: req.params.id }, ep.done('posts'));
    });
    
  2. Express中间件:通过中间件实现路由、错误处理等功能。例如,定义一个简单的中间件来记录请求日志:

    app.use(function(req, res, next) {
        console.log(`${req.method} ${req.url}`);
        next();
    });
    
  3. MongoDB与Mongoose:使用Mongoose作为MongoDB的对象建模工具。例如,定义一个Post模型:

    const mongoose = require('mongoose');
    const Schema = mongoose.Schema;
    
    const PostSchema = new Schema({
        title: String,
        content: String,
        authorId: { type: Schema.Types.ObjectId, ref: 'User' },
        createdAt: { type: Date, default: Date.now }
    });
    
    module.exports = mongoose.model('Post', PostSchema);
    

部署与测试

该项目已经部署在了一个服务器上,你可以访问以下链接进行查看:

求拍砖

非常欢迎大家提出宝贵的意见和建议!无论是代码规范、功能设计还是性能优化等方面,都希望能得到大家的指正。希望这个项目能够帮助更多的Node.js初学者更好地理解和掌握相关技术。


万维网黑客联盟发来贺电 bbs.w3hacker.com

很厉害啊

不错,顶起

发表文章的按钮能不能判断下权限再显示。。

点过去也是直接登录的页面,应该无所谓的吧

为神马我发文章时,总是提示”内容不能为空“,我明明已经输入内容了。

有标签功能很好~~~,但是URL用HASH值这个实在是…

为什么你们都不用Mysql呢, 这个MongoDB可是内存大户呀

有文件上传漏洞,看那代码应该是直接抄以前nodeclub上的。。。这种无聊事我不做了,要做个善良的人

感觉非常不错的系统哈,写了那么多东东

不错不错,很有Nodeclub的风格,学习啦~

大神啊 。。。 汗,我看那破教程都卡住了 。。 奶奶的 ,现在版本更新太快 对着书上代码打,都运行不了 。。。

哈哈。。。我也是。。。

最近都在学习各种node的项目,哈,谢谢楼主,学习了

有用,顶一下!

你的Blog项目看起来已经很不错了,特别是在使用EventProxy来优化异步处理方面做得很好。下面是一些反馈和建议,希望能够帮助你进一步提升项目。

功能性反馈

  1. 响应式设计

    • 当前的博客在小屏幕设备上显示效果不是很好,可以考虑添加媒体查询来改善响应式布局。
    • 示例:
      @media (max-width: 768px) {
        .container {
          flex-direction: column;
        }
      }
      
  2. 性能优化

    • 考虑将一些静态资源(如图片、CSS和JS文件)通过CDN进行加载,以提高页面加载速度。
    • 使用Webpack或Gulp进行资源打包和压缩。
  3. 用户交互

    • 增加评论功能,并且确保评论部分支持Markdown格式输入。
    • 示例:
      const showdown = require('showdown');
      const converter = new showdown.Converter();
      let markdownText = "# Hello, World!";
      let html = converter.makeHtml(markdownText);
      
  4. 安全性

    • 对所有用户提交的数据进行严格的校验,防止XSS攻击。
    • 确保使用HTTPS协议传输数据。

代码结构和可维护性

  1. 模块化

    • 确保每个功能模块都有良好的分离和封装,便于未来维护和扩展。
    • 示例:
      // user.js
      module.exports = {
        register: function(req, res) {},
        login: function(req, res) {}
      };
      
  2. 错误处理

    • 统一错误处理逻辑,确保在任何异常情况下都能返回有意义的错误信息。
    • 示例:
      app.use(function(err, req, res, next) {
        console.error(err.stack);
        res.status(500).send('Something broke!');
      });
      

其他建议

  • 在项目中增加测试用例,例如使用Mocha和Chai来进行单元测试。
  • 提供详细的文档,包括如何安装、配置和部署项目。

希望这些建议能对你有所帮助!继续加油,你的项目很有潜力。

回到顶部