小聂教你写nodejs之博客系统解析
发布于 9 年前 作者 yanglinnie 5077 次浏览 最后一次编辑是 8 年前 来自 分享

最近nodejs小聂重写了自己的博客 用时六个小时左右

本博客系统源代码 (https://coding.net/u/niefengjun/p/blog_es6/git)

本博客系统的代码图

704215522044153856.png 先把目录结构做个简单介绍

config 配置文件

lib  主要逻辑文件夹

public 公共静态文件资源

routes 路由文件夹

views 模板引擎文件夹

admin.js 给博客添加管理员账号 密码 默认密码 12345

app.js 博客系统基本基本框架配置

www.js 博客启动文件

其实我把博客系统分为三个部分

1 输入参数框架层

我用的是express 框架来处理参数 和基础框架编写的问题的
解析下我的app.js
var express = require('express');  //express 框架
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var ejs = require('ejs');
var routes = require('./routes/index');
var ueditor = require("ueditor");

var app = express();

// 中间件
app.use(bodyParser.json());

app.use(bodyParser.urlencoded({ extended: false }));

app.use(cookieParser());

app.use(require('stylus').middleware(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.urlencoded({
    extended: true
}))
app.use(bodyParser.json());
//模板引擎
app.use(express.static(path.join(__dirname, 'public')));
app.set('views', path.join(__dirname, 'views'));
app.engine('.html', ejs.__express);
app.set('view engine', 'html');

//加载路由
app.use('/', routes);
//百度编辑器 上传图片处理
app.use("/ueditor/ue/", ueditor(path.join(__dirname, 'public'), function (req, res, next) {
    // ueditor 客户发起上传图片请求

    if (req.query.action === 'uploadimage') {
        var foo = req.ueditor;
        var date = new Date();
        var imgname = req.ueditor.filename;

        var img_url = '/images/ueditor/';
        res.ue_up(img_url); //你只要输入要保存的地址 。保存操作交给ueditor来做
    }
    //  客户端发起图片列表请求
    else if (req.query.action === 'listimage') {
        var dir_url = '/images/ueditor/';
        res.ue_list(dir_url); // 客户端会列出 dir_url 目录下的所有图片
    }

    else {
        // console.log('config.json')
        res.setHeader('Content-Type', 'application/json');
        res.redirect('/ueditor/nodejs/config.json');
    }
}));

//404 页面处理

app.use(function(req, res, next) {
    res.render('404');
});
//日志插件
var log4js = require('log4js');
log4js.configure('config/log4js.json');
global.logger = log4js.getLogger();
app.use(log4js.connectLogger(logger,
    {
        format: ':method :url HTTP/:http-version :status :res[content-length] - :response-time ms',
        nolog: ["\\.jpg", "\\.ico", "\\.png", "\\.gif", "\\.js", "\\.css", "\\.swf"]
    }));

module.exports = app;

   2 逻辑处理部分

     逻辑处理相对来说比较简单 这里就不做介绍了

    3 数据库部分

      本博主为了节省开支 服务器用的是最低配的阿里云  所以数据库也就采用最轻量级的nedb

//数据库连接部分
var Datastore = require('nedb');


exports.getnedb = function (collectionName) {

    return db1 = new Datastore({filename: '../db/niefengjun/'   collectionName, autoload: true});
}


var db = require('./db').getnedb('blog');
var Q = require('q');
//插入博客
function add(ret) {
    var defer = Q.defer();
    db.insert(ret, function (e, v) {
        if (e) {
            console.error(e, v);
            defer.reject(e)
        }
        else {
            defer.resolve(v);
        }
        }
    );
    return defer.promise;
}

//博客列表 
function list() {
    var defer= Q.defer() ;
    db.find({}).sort({created: -1}).skip().exec(function (err, list) {
       if(err)
       {
           defer.reject(err);
       }
        else
       {
           defer.resolve(list)
       }
    });

    return defer.promise ;
}
\n```

     至此非常简单的三步 就把博客写好了  前端模板引擎用的是ejs  可以参阅博客的其他文章了解模板引擎  这里就不多介绍了 
	 
	 
	原文地址 : http://www.niefengjun.cn/blog/1e406ade4349666d93d9ec8b234ad0f9.html?u=cnodejsboke
9 回复

第一眼看成聂小倩 -。 -

楼上的我也是。。。 <br> 来自宇宙超级无敌帅的南风小神仙~~

哈哈哈 聂小倩

回到顶部