最近做了一个markdown的个人博客,基于node+express的,前端模版基于ejs,开始是将原始markdown返到页面的标签里,然后用 https://github.com/chjj/marked 解析的,高亮用的highlight官网的js,在html中是这么调用的:
js
marked.setOptions({ renderer: new marked.Renderer(), gfm: true, tables: true, breaks: true, pedantic: false, sanitize: false, smartLists: false, smartypants: false, highlight: function (code) { return hljs.highlightAuto(code).value; } }); var article = $('#article').val(); $('.article').html(marked(article));
上边的代码时可行的。
现在我想直接在node里将markdown解析成html,是这么写的,
js
var marked = require('marked'), hljs = require('../public/js/highlight/highlight.pack.js'); marked.setOptions({ renderer: new marked.Renderer(), gfm: true, tables: true, breaks: true, pedantic: false, sanitize: false, smartLists: false, smartypants: false, highlight: function (code) { return hljs.highlightAuto(code).value; } }); ... router.get('/a/:id', function (req, res) { Post.getOne(req.params.id, function (err, post) { if (err) { req.flash('error', err); return res.redirect('/'); } res.render('article', { title: post.title, curIndex: 0, article: marked(post.post), post: post, user: req.session.user, success: req.flash('success').toString(), error: req.flash('error').toString() }); }); });
但是提示 undefined is not a function
,望高人指点,谢谢
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
虽然 highlight 官方说 highlight 兼容 nodejs,但始终没找到相关应用的文档……
时隔一年啊。。。
好吧,我也是遇到这样的问题。。。
不过我已经解决了,留下我的解决方式给以后的人作为参考吧。。。
首先是这个undefined的问题,这个是因为,你使用的highlight.js是前端用的js文件,它的封装是这样的:
也就是说,你在前端调用的时候,引入这个.js文件,然后直接在你的js里面调用就ok了。但是,在node里面,一切外部引入的js都依赖于
require
这个函数,而这个函数引入的.js里面又必须使用module.exports
暴露出来。很明显,上面的那种没有这种暴露写法,require进来后因为作用域问题无法调用,所以用不了hljs
,所以是个undefined
。。。这应该算是require的一个闭包问题吧。。。然后是解决办法。。。我直接就推荐一个最简单粗暴的办法吧。。。
检查下项目里node_modules文件夹下面是否存在highlight.js这个包,注意,文件名后面是有带.js的:
如果没有的话,
npm install highlight.js
或者在package.json里面添加然后,把
改为
然后就ok拉~(≧▽≦)/~
报错的是指哪个
undefined
,marked
还是highlight
,我最近也写了点类似的东西,marked+highlight
是可以用的。强烈推荐Gitblog来写博客。
Gitblog是一个简单易用的Markdown博客系统,它不需要数据库,没有管理后台功能,更新博客只需要添加你写好的Markdown文件即可。 它摆脱了在线编辑器排版困难,无法实时预览的缺点,一切都交给Markdown来完成,一篇博客就是一个Markdown文件。 同时也支持评论,代码高亮,数学公式,页面PV统计等常用功能。 Gitblog提供了不同的主题样式,你可以根据自己的喜好配置,如果你想自己制作博客主题,也是非常容易的。 Gitblog还支持整站静态导出,你完全可以导出整站静态网页部署到Github Pages。
Gitblog官方网站
http://www.gitblog.cn/