NodeJS搭建博客系统(二)构建一个markdown页面

1. 为项目添加markdown-js依赖,加入markdown解析能力:

     express 并不直接支持markdown语法,需要为项目添加markdown-js模块的依赖.


这里我们要修改package.json文件,添加相关依赖:


原package.json文件


{
  "name": "blog",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "body-parser": "~1.15.2",
    "cookie-parser": "~1.4.3",
    "debug": "~2.2.0",
    "ejs": "~2.5.2",
    "express": "~4.14.0",
    "morgan": "~1.7.0",
    "serve-favicon": "~2.3.0"
  }
}

修改成:


{
  "name": "blog",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "body-parser": "~1.15.2",
    "cookie-parser": "~1.4.3",
    "debug": "~2.2.0",
    "ejs": "~2.5.2",
    "express": "~4.14.0",
    "morgan": "~1.7.0",
    "serve-favicon": "~2.3.0",
    "markdown-js": ">= 0.0.1"
  }
}

在最下面加入: "markdown-js": ">= 0.0.1"


name:                指定我们app的名称,
dependesies: nodejs中定义依赖库,这里添加了对markdown-js的依赖,
private:                 制定是否将程序发布到npm全局仓库中


使用npm安装依赖:
$ npm install


安装成功后,在 ./node_modules 目录下会多出一个 mardown-js 目录




2. 让Express支持Markdown:


打开index.js开始编写node.js代码, 在没写任何代码前的index.js大致如下: 


var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});


router.get('/fendo', function (req, res) {
  res.send('hello,world!');
});

module.exports = router;

第一行导入 express 模块, 可以理解成java中的 import [packagename]。一会需要用这个语法来导入markdown-js模块模块


在里面加入: 


var markdown = require('markdown-js');


首先我们设计一个url

 

URL地址
描述
/markdown
当用户从浏览器访问这个页面的时候,输出一个指向JavaEye的超链接:
markdown 字符串:

Markdown代码

[fendo](http://blog.csdn.net/u011781521?viewmode=contents "Click")

生成的html代码: 
<a href="http://blog.csdn.net/u011781521?viewmode=contents" title="Click">fendo</a>


markdown.markHtml(); 是将markdown格式的字符转换成Html


在index.js添加如下代码:


app.get('/markdown', function(req, res) {  
    var html = markdown.makeHtml("[fendo](http://blog.csdn.net/u011781521?viewmode=contents \"Click\") ");  
    res.send(html)  
    res.end();  
})

访问:  http://localhost:3000/markdown 点击fendo就进入了我的博客。




3.  让Express渲染markdown文件 


在app.js中引入

var fs = require('fs');
var markdown = require('markdown-js');


然后给Express注册Markdown渲染器

app.engine('md', function(path, options, fn){  
  fs.readFile(path, 'utf8', function(err, str){  
    if (err) return fn(err);  
    str = markdown.parse(str).toString();  
    fn(null, str);  
  });  
});  


完整的代码:

var express = require('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 index = require('./routes/index');
var users = require('./routes/users');


var fs = require('fs');
var markdown = require('markdown-js');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', index);
app.use('/users', users);



// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

app.engine('md', function(path, options, fn){  
  fs.readFile(path, 'utf8', function(err, str){  
    if (err) return fn(err);  
    str = markdown.parse(str).toString();  
    fn(null, str);  
  });  
});  

module.exports = app;


修改 "/markdown" url的处理程序


router.get('/markdown', function(req, res) {  
   res.render('index.md',{layout:false});
})  

在views/目录下创建一个 index.md 文件
内容如下 


his is a demo page
===================
[fendo](http://blog.csdn.net/u011781521?viewmode=contents \"Click\")

重新运行项目: npm start


访问 http://localhost:3000/markdown



已经成功构建了第一个markdown页面。

Liblog已更新至V1.2.1版本,源码下载地址:https://github.com/livisky/liblog/archive/1.2.1.tar.gz Liblog最新教程已收录在w3cschool(http://www.w3cschool.cn/liblog/) ,欢迎评论和支持! 一.简介 Liblog是一个简单易用的Markdown博客系统,它是基于开源框架thinkJS(使用 ES6/7 特性开发 Node.js 框架)开发的nodejs项目 需要mysql数据库支持,具有管理后台功能,更新博客分为普通文章和markdown文章,markdown文章只需要导入你写好的Markdown文件即可。它摆脱了在线编辑器排版困难,无法实时预览的缺点,一切都交给Markdown来完成,一篇博客就是一个Markdown文件。同时也支持评论,代码高亮,分类,标签云,留言板、友情链接、系统设置等常用功能。Liblog提供了不同的主题样式,你可以根据自己的喜好配置,如果你想自己制作博客主题,也是非常容易的。Liblog还支持整站静态网页生成,同时有发布相关的配置,使用nginx做反向代理,动静态资源分离,静态缓存等,使您发布后的博客访问秒开。 .功能特点 一键导入Markdown文章 文章评论 代码高亮 文章内容分页 系统主题设置 响应式布局,支持手机端访问 良好的SEO 登录/注册/个人中心/个人设置 小型bbs,讨论社区 支持cms标签循环 完善的后台及权限控制 三.安装及其他介绍 安装教程:http://www.jsout.com/page/423.html 前台登录:admin@jsout.com 123456 后台登录:admin 123456 安装Liblog之前,请star并fork项目给作者以鼓励。 如果你认可并支持Liblog,还可通过扫描维码捐赠Liblog(http://www.jsout.com/donate.html) 四.最新版本Liblogv1.2.1更新 【后台管理】添加友情链接管理 1)友情链接增加独立管理菜单,增加审核、排序、隐藏功能 2)友情链接增删查改 3)系统设置-常规设置的友情链接设置项删除 【后台管理】后台主题设置优化,修复设置错误后台打不开的bug 【个人中心】修复个性签名设置bug,积分算法bug修复-forlong401 【后台管理】添加社区标签管理功能-forlong401 【后台管理】添加后台文章标签排序功能 【个人中心】积分排名榜修复,添加缓存 【后台管理】完善导航管理(新窗口打开、排序等)-斯迈欧 【后台管理】添加系统logo设置-斯迈欧 修复部分已知bug 五.感谢 Liblog的成长需要各位亲们支持!感谢你们使用Liblog,感激你们对Liblog的良好建议与Bug反馈。如果你的博客也是基于Liblog,请告知作者,无偿获取技术指导。 前端汇 http://www.jsout.com 维卡冲突世界 http://www.kixeyes.com Liblog QQ群:256687601 作者邮箱:262248861@qq.com 演示网站:https://www.jsout.com 六.更新日志 详见:https://github.com/livisky/liblog/wiki/updateLog 添加静态资源一键打包功能(html,css,javascript) gulp配置 添加开发和生产运行模式 七.运行程序请选择运行模式 //压缩html,css,js 并生成相应目录 npm run compress //运行开发模式,html,css,js均加载未压缩版本 npm run dev //运行生产模式,html,css,js均加载压缩版本 npm run app //首次运行/更新运行前请先编译项目 npm run compile //线上推荐用pm2来运行(先配置好pm2.json) pm2 start pm2.json 标签:liblog  markdown
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值