小聂教你写nodejs之博客系统解析
最近nodejs小聂重写了自己的博客 用时六个小时左右
本博客系统源代码 (https://coding.net/u/niefengjun/p/blog_es6/git)
本博客系统的代码图
先把目录结构做个简单介绍
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