基于Nodejs的Koa框架做了个个人博客,求拍死
基于Node.js的Koa框架做了个个人博客,求拍死
最近用Node.js的Koa框架结合MongoDB搭建了一个个人博客系统。使用Markdown语法来撰写博客文章,整体思路比较主流。其实大约三个月前,我用Express框架已经实现过类似的功能,但是一直没有正式上线。这次换成了Koa框架,感觉非常爽,特别是摆脱了回调地狱(callback hell)。
技术栈
- 前端: HTML, CSS, JavaScript
- 后端: Node.js + Koa
- 数据库: MongoDB
- 文本格式: Markdown
- 模板引擎: Pug (原Jade)
项目结构
Node_blog_V2/
├── app.js # 主应用文件
├── config/ # 配置文件
│ └── db.js # 数据库配置
├── controllers/ # 控制器文件夹
│ └── blog.js # 博客控制器
├── models/ # 模型文件夹
│ └── blog.js # 博客模型
├── routes/ # 路由文件夹
│ └── index.js # 路由定义
├── views/ # 视图文件夹
│ └── blog.pug # 博客页面
├── public/ # 公共资源文件夹
│ ├── css/ # CSS文件
│ └── js/ # JS文件
└── package.json # 依赖包管理文件
示例代码
app.js
const Koa = require('koa');
const Router = require('koa-router');
const mongoose = require('mongoose');
const app = new Koa();
const router = new Router();
// 连接MongoDB
mongoose.connect('mongodb://localhost/blog', { useNewUrlParser: true, useUnifiedTopology: true });
// 引入路由
require('./routes/index')(router);
app.use(router.routes()).use(router.allowedMethods());
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
controllers/blog.js
const Blog = require('../models/blog');
exports.getAllBlogs = async (ctx) => {
const blogs = await Blog.find();
ctx.body = blogs;
};
exports.getBlogById = async (ctx) => {
const blog = await Blog.findById(ctx.params.id);
if (!blog) ctx.throw(404, 'Blog not found');
ctx.body = blog;
};
routes/index.js
const Router = require('koa-router');
const blogCtrl = require('../controllers/blog');
const router = new Router();
router.get('/blogs', blogCtrl.getAllBlogs);
router.get('/blogs/:id', blogCtrl.getBlogById);
module.exports = router;
项目现状
目前这个博客系统已经部署到阿里云服务器上,你可以通过以下链接访问:
前端部分,我花了半个月的时间来优化HTML和CSS,但目前的水平还是不尽人意。如果你有任何建议或者批评,欢迎留言指正。此外,我发现Markdown编辑器的实现方式与CNode社区的类似。
希望各位大佬能给我一些宝贵的反馈,无论是技术上的建议还是用户体验上的意见,我都虚心接受。
+1
一篇文章都没有
样式不错,配色我喜欢
居然连域名都不买。。。
怎么感觉慢慢地? 另外,除了没有callback,用Koa还有什么好处么?
jade模板看着真不舒服
有用到文件上传吗?想请教你一个koa上传文件的问题?
-
- 还不错
你在逗我,iis7 自豪地采用 CNodeJS ionic
iis7我也曾经用过,现在是放弃MS了
根据你的描述,你基于 Node.js 和 Koa 框架开发了一个个人博客系统,并且使用 Markdown 语法撰写文章。你希望得到一些反馈或建议,即使批评也可以接受。
示例代码片段
下面是一些可能涉及的关键部分代码示例:
1. 安装依赖
首先确保安装了必要的依赖包:
npm install koa koa-router koa-static mongoose marked
2. 配置 Koa 应用
const Koa = require('koa');
const Router = require('koa-router');
const static = require('koa-static');
const mongoose = require('mongoose');
const app = new Koa();
const router = new Router();
// 静态文件服务
app.use(static(__dirname + '/public'));
// MongoDB 连接配置
mongoose.connect('mongodb://localhost/blog', { useNewUrlParser: true, useUnifiedTopology: true });
// 路由定义
router.get('/', async (ctx) => {
ctx.body = 'Welcome to my blog!';
});
app.use(router.routes()).use(router.allowedMethods());
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
3. 使用 Markdown 渲染文章
const marked = require('marked');
router.get('/post/:id', async (ctx) => {
const post = await Post.findById(ctx.params.id);
if (!post) {
ctx.status = 404;
return;
}
// 将 Markdown 转换为 HTML
post.contentHtml = marked(post.content);
ctx.body = post;
});
反馈与建议
-
前端布局:从你提到的CSS和HTML结构混乱的情况来看,前端布局需要进一步优化。可以考虑使用一些前端框架(如 Bootstrap、Tailwind CSS)来简化布局和样式设计。
-
SEO 优化:虽然这是一个个人博客,但还是建议做一些基本的 SEO 优化,比如添加 meta 标签、优化 URL 结构等。
-
错误处理:在实际生产环境中,错误处理非常重要。可以添加全局的错误处理中间件,以确保用户能获得有用的错误信息。
-
安全性:确保对输入进行有效的验证和过滤,防止 XSS 攻击等安全问题。对于上传的文件,最好使用白名单机制来限制上传类型。
-
性能优化:可以考虑引入缓存策略,例如 Redis 来缓存频繁查询的数据,提高应用响应速度。
希望这些建议对你有所帮助!如果还有其他具体需求或疑问,欢迎继续讨论。