私はそれを自分で実装する方法を理解することができました。
function setSlug(req, res, next) {
// remove special chars, trim spaces, replace all spaces to dashes, lowercase everything
var slug = req.body.title.replace(/[^\w\s]/gi, '').trim().replace(/\s+/g, '-').toLowerCase();
var counter = 2;
// check if there is existing blog with same slug
Blog.findOne({ slug: slug }, checkSlug);
// recursive function for checking repetitively
function checkSlug(err, existingBlog) {
if(existingBlog) { // if there is blog with the same slug
if(counter == 2) // if first round, append '-2'
slug = slug.concat('-' + counter++);
else // increment counter on slug (eg: '-2' becomes '-3')
slug = slug.replace(new RegExp(counter++ + '$', 'g'), counter);
Blog.findOne({ slug: slug }, checkSlug); // check again with the new slug
} else { // else the slug is set
req.body.slug = slug;
next();
}
};
}
私はWordpressで少し遊んでいました。奇妙なタイトルのテストブログ記事をたくさん公開して、タイトルの変換をどのように処理するかを確認し、自分の発見に基づいてタイトルを変換する最初のステップを実装しました。 Wordpressの:
- が
- トリム離れてすべての特殊文字を削除先頭と終わりのスペース
- が
小文字のすべて
単一のダッシュに残りのスペースを変換し、