NodeJS - 猫鼬替换空格和小写字

时间:2015-03-12 15:04:08

标签: node.js mongodb express routes mongoose

我正在尝试使用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>

1 个答案:

答案 0 :(得分:1)

使用像string这样的包,并在保存之前删除所有空格:

var S = require('string');
S(req.body.tags).replaceAll(' ', '');