学习NodeJs,练习做的blog,求各种拍砖
学习NodeJs,练习做的blog,求各种拍砖
自己学习Node写的BLOG。。。
参考了很多Nodeclub的东西,比如学习了Nodeclub中的Eventproxy来解决嵌套过深的问题
也参考了很多Node的源码
NAE地址:http://moblog.cnodejs.net/
Github地址:https://github.com/moskito518/moblog.git
请各位大神轻拍,多多指教。
学习NodeJs,练习做的Blog,求各种拍砖
大家好,这是我最近使用Node.js学习并编写的一个Blog系统。在这个过程中,我参考了很多优秀的项目,比如Nodeclub,并从中学习到了很多有用的知识和技术。
技术栈
- Node.js:后端开发的基础。
- Express.js:一个简洁而灵活的Node.js Web应用框架。
- MongoDB:作为数据存储。
- EventProxy:用于解决异步回调嵌套过深的问题。
项目介绍
这个Blog系统实现了基本的功能,包括文章发布、分类管理、评论等。虽然功能简单,但我希望通过这个项目学习到更多关于Node.js和Web开发的知识。
关键技术点
-
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')); });
-
Express中间件:通过中间件实现路由、错误处理等功能。例如,定义一个简单的中间件来记录请求日志:
app.use(function(req, res, next) { console.log(`${req.method} ${req.url}`); next(); });
-
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);
部署与测试
该项目已经部署在了一个服务器上,你可以访问以下链接进行查看:
- NAE地址: http://moblog.cnodejs.net/
- Github地址: https://github.com/moskito518/moblog.git
求拍砖
非常欢迎大家提出宝贵的意见和建议!无论是代码规范、功能设计还是性能优化等方面,都希望能得到大家的指正。希望这个项目能够帮助更多的Node.js初学者更好地理解和掌握相关技术。
万维网黑客联盟发来贺电 bbs.w3hacker.com
很厉害啊
不错,顶起
发表文章的按钮能不能判断下权限再显示。。
点过去也是直接登录的页面,应该无所谓的吧
为神马我发文章时,总是提示”内容不能为空“,我明明已经输入内容了。
有标签功能很好~~~,但是URL用HASH值这个实在是…
为什么你们都不用Mysql呢, 这个MongoDB可是内存大户呀
有文件上传漏洞,看那代码应该是直接抄以前nodeclub上的。。。这种无聊事我不做了,要做个善良的人
感觉非常不错的系统哈,写了那么多东东
不错不错,很有Nodeclub的风格,学习啦~
大神啊 。。。 汗,我看那破教程都卡住了 。。 奶奶的 ,现在版本更新太快 对着书上代码打,都运行不了 。。。
哈哈。。。我也是。。。
最近都在学习各种node的项目,哈,谢谢楼主,学习了
有用,顶一下!
你的Blog项目看起来已经很不错了,特别是在使用EventProxy
来优化异步处理方面做得很好。下面是一些反馈和建议,希望能够帮助你进一步提升项目。
功能性反馈
-
响应式设计:
- 当前的博客在小屏幕设备上显示效果不是很好,可以考虑添加媒体查询来改善响应式布局。
- 示例:
@media (max-width: 768px) { .container { flex-direction: column; } }
-
性能优化:
- 考虑将一些静态资源(如图片、CSS和JS文件)通过CDN进行加载,以提高页面加载速度。
- 使用Webpack或Gulp进行资源打包和压缩。
-
用户交互:
- 增加评论功能,并且确保评论部分支持Markdown格式输入。
- 示例:
const showdown = require('showdown'); const converter = new showdown.Converter(); let markdownText = "# Hello, World!"; let html = converter.makeHtml(markdownText);
-
安全性:
- 对所有用户提交的数据进行严格的校验,防止XSS攻击。
- 确保使用HTTPS协议传输数据。
代码结构和可维护性
-
模块化:
- 确保每个功能模块都有良好的分离和封装,便于未来维护和扩展。
- 示例:
// user.js module.exports = { register: function(req, res) {}, login: function(req, res) {} };
-
错误处理:
- 统一错误处理逻辑,确保在任何异常情况下都能返回有意义的错误信息。
- 示例:
app.use(function(err, req, res, next) { console.error(err.stack); res.status(500).send('Something broke!'); });
其他建议
- 在项目中增加测试用例,例如使用Mocha和Chai来进行单元测试。
- 提供详细的文档,包括如何安装、配置和部署项目。
希望这些建议能对你有所帮助!继续加油,你的项目很有潜力。