优雅写异步与循环
This commit is contained in:
@@ -1,47 +1,6 @@
|
||||
const crypto = require('crypto')
|
||||
/**
|
||||
* 创建mongodb数据库连接, 返回Model
|
||||
*/
|
||||
function createModel(dbUrl) {
|
||||
const Segment = require('segment')
|
||||
const segment = new Segment() // 创建实例
|
||||
segment.useDefault() // 使用默认的识别模块及字典
|
||||
|
||||
const mongoose = require('mongoose')
|
||||
mongoose.connect(dbUrl, {useNewUrlParser: true})
|
||||
const articleSchema = new mongoose.Schema({
|
||||
title: String,
|
||||
path: String,
|
||||
create_date: Date,
|
||||
content: String,
|
||||
content_hash: String
|
||||
}, {
|
||||
collection: 'article',
|
||||
versionKey: false,
|
||||
})
|
||||
|
||||
const articleKeysSchema = new mongoose.Schema({
|
||||
article_id: mongoose.Types.ObjectId,
|
||||
keys: Array
|
||||
}, {
|
||||
collection: 'article_keys',
|
||||
versionKey: false,
|
||||
})
|
||||
return {
|
||||
articleModel: mongoose.model('Article', articleSchema),
|
||||
articleKeysModel: mongoose.model('ArticleKeys', articleKeysSchema)
|
||||
}
|
||||
}
|
||||
|
||||
var mongooseModels = undefined
|
||||
if(hexo.config.save_content) {
|
||||
mongooseModels = createModel('mongodb://127.0.0.1:27017/common_api')
|
||||
}
|
||||
|
||||
// 替换markdown中图片路径的正则
|
||||
const mdImageRegex = /\]\s*\((?=(?!http).*?\))/gi
|
||||
// 替换所有HTML标签的正则
|
||||
const tagRegex = /<[^>]*>/g
|
||||
hexo.extend.filter.register('before_post_render', function(article){
|
||||
// article.raw 是原始的文件内容
|
||||
// article.content 是处理过代码块语法高亮的内容
|
||||
@@ -49,32 +8,4 @@ hexo.extend.filter.register('before_post_render', function(article){
|
||||
article.content = article.content.replace(mdImageRegex, `](${hexo.config.picture_cdn}`)
|
||||
}
|
||||
return article
|
||||
})
|
||||
|
||||
hexo.extend.filter.register('after_post_render', function(article){
|
||||
if(!mongooseModels || article.pageid) return article
|
||||
let textContent = article.content.replace(tagRegex, '')
|
||||
const contentHash = crypto.createHash('sha1')
|
||||
.update(textContent)
|
||||
.digest('hex')
|
||||
let articleKeys = segment.doSegment(textContent, {
|
||||
simple: true, // 不返回词性
|
||||
stripPunctuation: true // 去除标点符号
|
||||
})
|
||||
const articleEntity = new mongooseModels.articleModel({
|
||||
title: article.title,
|
||||
path: article.path,
|
||||
create_date: article.date._i,
|
||||
content: textContent,
|
||||
content_hash: contentHash
|
||||
})
|
||||
articleEntity.save(function(err, savedArticle){
|
||||
if(err) console.error(err)
|
||||
const articleKeysEntity = new mongooseModels.articleKeysModel({
|
||||
article_id: savedArticle._id,
|
||||
keys: articleKeys,
|
||||
})
|
||||
articleKeysEntity.save()
|
||||
})
|
||||
return article;
|
||||
})
|
||||
Reference in New Issue
Block a user