Node.js做的个人博客(仿node-club;基于express3,markdown,mongoose)

Node.js做的个人博客(仿node-club;基于express3,markdown,mongoose)

/app/controllers/site.js

11 回复

Node.js做的个人博客(仿node-club;基于express3,markdown,mongoose)

在这篇文章中,我们将探讨如何使用Node.js、Express3、Markdown和Mongoose来构建一个简单的个人博客。我们将重点关注控制器部分的实现,这是处理业务逻辑的关键部分。

文件结构

首先,我们假设项目的基本文件结构如下:

/blog
├── app
│   ├── controllers
│   │   └── site.js
│   ├── models
│   │   └── post.js
│   ├── routes
│   │   └── index.js
├── public
│   ├── css
│   │   └── style.css
│   ├── js
│   │   └── script.js
└── views
    ├── layouts
    │   └── default.jade
    ├── partials
    │   └── header.jade
    └── index.jade

控制器实现

现在让我们看看site.js文件中的内容。这个文件将包含处理站点路由的逻辑。

// /app/controllers/site.js
var express = require('express');
var router = express.Router();
var Post = require('../models/post');

// 获取所有文章
router.get('/', function(req, res) {
  Post.find({}, function(err, posts) {
    if (err) return res.status(500).send("There was a problem finding the posts.");
    res.render('index', { posts: posts });
  });
});

// 创建新文章
router.post('/posts', function(req, res) {
  var newPost = new Post({
    title: req.body.title,
    content: req.body.content
  });

  newPost.save(function(err) {
    if (err) return res.status(500).send("There was a problem saving the post.");
    res.redirect('/');
  });
});

module.exports = router;

模型定义

接下来是post.js模型文件,它定义了文章的数据结构。

// /app/models/post.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var PostSchema = new Schema({
  title: String,
  content: String,
  createdAt: { type: Date, default: Date.now }
});

module.exports = mongoose.model('Post', PostSchema);

路由配置

最后,我们需要配置路由,将请求分发到相应的控制器。

// /app/routes/index.js
var express = require('express');
var router = express.Router();
var siteController = require('../controllers/site');

router.use('/', siteController);

module.exports = router;

总结

以上就是使用Node.js、Express3、Markdown和Mongoose构建个人博客的基本步骤。通过这些代码片段,我们可以看到如何组织文件结构、编写控制器逻辑、定义数据模型以及配置路由。这种方式可以有效地分离关注点,并使代码更加模块化和易于维护。


好多blog啊= =

入门惯例~~

不错,收藏

网址打不开了。。

嗯 不太稳定–

晕 没有注册模块??

部署了下,简洁美观,自己才刚学,不知道什么时候才到达楼主的境界,厉害

请问怎么部署的?我下载了一个不会部署,就是怎么在自己电脑上跑起来

好的,我们可以基于Express 3、Markdown 和 Mongoose 来构建一个简单的个人博客。以下是实现这个功能的基本步骤和示例代码。

1. 环境配置

首先确保已经安装了以下依赖项:

  • Express 3.x
  • Mongoose
  • Markdown(使用 marked 库)

你可以通过 npm 安装这些库:

npm install express@3.x mongoose marked --save

2. 基本框架设置

创建基本的 Express 3 应用结构:

// app.js
var express = require('express');
var mongoose = require('mongoose');
var marked = require('marked');

var app = express();
var port = process.env.PORT || 3000;

// 连接 MongoDB
mongoose.connect('mongodb://localhost/blog', { useNewUrlParser: true, useUnifiedTopology: true });

// 配置中间件
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.static(__dirname + '/public'));

// 路由
require('./app/routes')(app);

// 启动服务器
app.listen(port);
console.log('Server running on http://localhost:' + port);

3. 创建博客模型

定义一个简单的博客模型:

// models/post.js
var mongoose = require('mongoose');

var postSchema = new mongoose.Schema({
    title: String,
    content: String,
    markdownContent: String,
    createdAt: { type: Date, default: Date.now }
});

module.exports = mongoose.model('Post', postSchema);

4. 控制器文件

接下来是 site.js 控制器文件:

// app/controllers/site.js
var Post = require('../models/post');

exports.index = function(req, res) {
    Post.find({}, function(err, posts) {
        if (err) return res.status(500).send(err);
        res.render('index', { posts: posts.map(post => ({
            title: post.title,
            content: marked(post.markdownContent)
        })) });
    });
};

exports.create = function(req, res) {
    var post = new Post({
        title: req.body.title,
        markdownContent: req.body.content
    });
    
    post.save(function(err) {
        if (err) return res.status(500).send(err);
        res.redirect('/');
    });
};

5. 配置路由

最后,在 routes.js 文件中配置路由:

// app/routes.js
module.exports = function(app) {
    var siteController = require('./controllers/site');

    app.get('/', siteController.index);
    app.post('/posts', siteController.create);
};

总结

上述代码提供了一个简单的个人博客应用的基础架构。用户可以发布带有 Markdown 的博客文章,并在首页查看这些文章的渲染结果。这个应用使用了 Express 3、Mongoose 和 Marked 来处理请求、存储数据和转换 Markdown 文本。希望这对你有所帮助!

回到顶部