Nodejs 个人写的 基于 express 的 blog .路由基于独立开发的mvc模块。完全支持express 路由语法

Nodejs 个人写的 基于 express 的 blog .路由基于独立开发的mvc模块。完全支持express 路由语法

后端是基于express ,自己编写的 mvc 核心模块、 前端基于angularjs。编写的还不是很熟练。所以基本谈不高效。 angularjs 基于前端mvc 路由机制。概念很早就有了。只是最近google 将它发扬光大。 目前还不能提供多用户注册。主要空间问题不能解决。补在appfog上面。速度还好,就是管理困难。 刚刚添加了,刷新twitter 功能。但是占时只能刷新内容,而且功能十分简单。看了下twitter api ,发现看的巨困难,实在是不太懂怎么调用https 的 api,所以只好用 npm 封装好的东东了。 很简单。要是有关于twitter api 的质料,也请提供一下。

实现了登录国外twitter 的功能。可以发送,刷新消息。查看 其他用户发的消息,“@自己” 的消息。可以通过在输入框里面输入命令follow 人。但是功能太多,还不能全部实现。现在前后端仍然需要重构。欠缺后台管理代码。

现在主要问题;

第一。目前缺乏后台管理模版。所以不能开放注册。是在太山寨了。 第二。缺乏文本编辑器。现有的功能不全。其实最好应该是静态的,不应该放在数据库吧, 不过appfog 好像不能支持动态生成的文件。还望大家指正。或有好的建议。 第三。有一些必要的优化还没有做。功能相对单一简单。 大家轻喷。 地址:http://fenglinhuo.ap01.aws.af.cm/blog

现在暂时还不能开源,因为后台还没有完善。谁能推荐一套后台模版?

今天更新的内容。

  1. 改写angular 路由表。更改数据库逻辑。用ObjectId作为唯一ID。
  2. 添加的markdown-js 功能,只是编辑器又改成了textarea。 今天碰到了些问题。 我的逻辑是把内容传到服务器的数据库里面。然后前端显示的时候读取数据库,然后发到前端,前端解析markdown.但是老是解析不正常。看了下源码觉得是markdown-js对\r\n 处理的不对。 于是就把\r 过滤了。这样才能正常显示。坑爹啊。 我后来重写的几篇blog就是用markdown 语法写的。因为对语法还不熟悉,所以暂时很简单。还没有完整的测试。

添加的对评论的回复功能。rss 刷新更人性化。图片上传可以上传链接。


13 回复

Nodejs 个人写的基于 Express 的 Blog

简介

本文介绍了一个基于 Express 框架的个人博客系统,该系统使用自定义的 MVC 模块来处理路由,同时支持 Express 的路由语法。前端采用 AngularJS,而 Twitter API 的集成则通过 npm 包来简化。

技术栈

  • 后端: Node.js + Express
  • 前端: AngularJS
  • 数据库: MongoDB
  • API: Twitter API (通过 npm 包 twit)

主要功能

  1. 登录和发送推文
  2. 刷新和查看推文
  3. 关注和取消关注用户
  4. Markdown 支持
  5. 评论和回复功能

MVC 模块

自定义的 MVC 模块分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。

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

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

module.exports = mongoose.model('Post', PostSchema);
// controllers/postController.js
const Post = require('../models/post');

exports.getAllPosts = async (req, res) => {
    try {
        const posts = await Post.find();
        res.json(posts);
    } catch (error) {
        res.status(500).json({ message: error.message });
    }
};

exports.createPost = async (req, res) => {
    const post = new Post(req.body);
    try {
        await post.save();
        res.status(201).send(post);
    } catch (error) {
        res.status(400).json({ message: error.message });
    }
};
// routes/postRoutes.js
const express = require('express');
const router = express.Router();
const postController = require('../controllers/postController');

router.get('/', postController.getAllPosts);
router.post('/', postController.createPost);

module.exports = router;

Twitter API 集成

使用 twit 包来集成 Twitter API。

// controllers/twitterController.js
const Twit = require('twit');

const T = new Twit({
    consumer_key: 'YOUR_CONSUMER_KEY',
    consumer_secret: 'YOUR_CONSUMER_SECRET',
    access_token: 'YOUR_ACCESS_TOKEN',
    access_token_secret: 'YOUR_ACCESS_TOKEN_SECRET'
});

exports.getTweets = async (req, res) => {
    try {
        const tweets = await T.get('search/tweets', { q: '#nodejs', count: 10 });
        res.json(tweets.data.statuses);
    } catch (error) {
        res.status(500).json({ message: error.message });
    }
};

当前问题与未来计划

  1. 后台管理模板:缺乏后台管理模板,导致无法开放注册。
  2. 文本编辑器:当前功能不全,需要一个静态的文本编辑器。
  3. 性能优化:一些必要的优化尚未完成。

总结

虽然项目还在不断改进中,但已经实现了基本的功能,并且支持 Express 的路由语法。如果你有任何建议或想要贡献代码,请随时联系。

地址: http://fenglinhuo.ap01.aws.af.cm/blog


还是可以的!

数据保存在哪里?

mongodb跟 appfog 上面的一个图片空间。

看了你的,我才发现,我的响应式导航在手机上效果太烂了

效果?我也是用的bootstrap 的。 有什么好建议吗?

谁给我提供个后台管理的模版

刚刚添加了,刷新twitter 功能。但是占时只能刷新内容,而且功能十分简单。看了下twitter api ,发现看的巨困难,实在是不太懂怎么调用https 的 api,所以只好用 npm 封装好的东东了。 很简单。要是有关于twitter api 的质料,也请提供一下。

界面上可以加强一下。

我就是对界面不熟悉才要找一套好的后台模版

刷新,大家去看看twitter 那里简单实现还需要什么功能?

针对你的需求,我们可以详细探讨如何使用Express框架配合自定义的MVC模块来构建一个博客系统,并简要介绍如何处理前端的AngularJS和后端的Twitter API调用。

示例代码

后端:Express + MVC模块

首先,假设我们有一个简单的MVC架构:

  1. Controller(控制器)

    // controllers/blog.js
    const express = require('express');
    const router = express.Router();
    
    router.get('/post/:id', (req, res) => {
        const postId = req.params.id;
        // 这里是从数据库获取数据
        res.render('post', { postId });
    });
    
    module.exports = router;
    
  2. Router(路由)

    // routes/blog.js
    const express = require('express');
    const blogController = require('../controllers/blog');
    
    const router = express.Router();
    
    router.use('/posts', blogController);
    
    module.exports = router;
    
  3. App.js(主应用)

    // app.js
    const express = require('express');
    const blogRoutes = require('./routes/blog');
    
    const app = express();
    
    app.use('/api', blogRoutes);
    
    app.listen(3000, () => {
        console.log('Server is running on port 3000');
    });
    

前端:AngularJS

在前端部分,你可以通过AngularJS来调用后端API:

// angularApp.js
var app = angular.module('blogApp', []);

app.controller('BlogController', function($scope, $http) {
    $scope.loadPost = function(id) {
        $http.get('/api/posts/post/' + id)
            .then(function(response) {
                $scope.post = response.data;
            });
    };
});

Markdown 处理

对于Markdown的处理,你可以使用marked库:

// server-side markdown handling
const marked = require('marked');
const html = marked('Hello *world*!');
console.log(html); // 输出为HTML

总结

以上代码展示了一个简单的Express+MVC模块用于创建博客路由,同时通过AngularJS从后端获取并展示数据。至于Twitter API调用,可以使用twit库封装请求,简化复杂性。

这种架构设计提供了清晰的分层结构,易于维护和扩展。希望这能帮助你更好地理解和构建你的博客系统。

回到顶部