我正在尝试使用mongoose创建标记系统,但我发现的问题是我能够将逗号分隔的项目保存到数组中,但如果我包含空格,则会保存空间并且不会被替换为一个连字符。我不确定使用正则表达式来解决这个问题的最佳方法是什么。我正在寻找的最终产品是,
字段中输入的标签:
标签:test, cow, farm yard
并将其显示为:
标签:test,cow,farm yard
有以下路线:
/tag/test
/tag/cow
/tag/farm-yard
以下是我如何记录我的Schema值(到数组):
var mongoose = require('mongoose');
var mongoosePaginate = require('mongoose-paginate');
var Schema = mongoose.Schema;
var BlogPostSchema = new Schema({
title: { type: String, unique: true },
featureImage: String,
blogUrl: String,
content: String,
tags: { type: Array, lowercase: true },
date: { type: Date, default: Date.now() }
});
BlogPostSchema.post('init', function (post) {
var date = new Date(post.date || Date.now() );
post.dateString = date.getMonth() + 1 + '/' + date.getDate() + '/' + date.getFullYear();
});
BlogPostSchema.plugin( mongoosePaginate );
var Blogpost = mongoose.model("Blogpost", BlogPostSchema);
module.exports = mongoose.model('Blogpost', BlogPostSchema);
以下是我在路线中发布记录的方式(使用trim方法):
router.route('/admin/posts/create')
// START POST method
.post(function(req, res) {
console.log("New instance");
console.log(req.body.tags);
var blogpost = new Blogpost(); // create a new instance of a Blogpost model
blogpost.title = req.body.title; // set the blog title
blogpost.featureImage = req.body.featureImage; // set the blog image
blogpost.blogUrl = blogpost.title.toLowerCase().replace(/\s+/g,"-");
blogpost.content = req.body.content; // set the blog content
blogpost.tags = req.body.tags.trim().split(","); // set the tags
//Save Blog Post
blogpost.save(function(err) {
if (err)
res.send(err);
res.redirect(303, '/'); //NEEDS TO BE CHANGED
});
}) // END POST method
最后,我在视图中将标签显示为链接:
<h3 class="blog-date"><%= blogpost.dateString %></h3>
<h3 class="blog-category"><%= blogpost.category %></h3>
<h3 class="blog-tagline"><i><%= blogpost.tagline %></i></h3>
<p><%- blogpost.content %></p>
<% for(var i=0; i<blogpost.tags.length; i++) { %>
<p>Tags:<a href="/tag/<%= blogpost.tags[i] %>"><%= blogpost.tags[i] %></a></p>
<% } %>
最终结果显示为循环中的单个标记,这些标记不正确,包含空格,非连字符空格:
<p>Tags:<a href="/tag/test">test</a></p>
<p>Tags:<a href="/tag/ cow"> cow</a></p>
<p>Tags:<a href="/tag/farm yard">farm yard</a></p>
答案 0 :(得分:1)
使用像string这样的包,并在保存之前删除所有空格:
var S = require('string');
S(req.body.tags).replaceAll(' ', '');