我正在开发一个应用程序,您可以在其中上传图像,并且上传的图像在缩略图中并排显示。我想实现过滤器的可能性,以便可以以不同的顺序显示图像,例如,具有最多点的图像按降序排列。
我很难想出一个很好的解决方案来解决这个问题,我唯一能想到的就是为此创建一条新路线(与我现在使用的路线相同,如下所示),但是不同的排序。
然而,这是 DRY 编码,并不是一件好事,尤其是因为我计划提供更多的排序选项。
我对此有两个问题:
- 有没有更好的方法来实现这一点(一种解决方案,这样我就不需要调用路由,而是在客户端执行它?或者可能将参数传递给路由并使用 if 语句决定如何排序) ?
- 如果应该在服务器端进行排序,我该如何处理积分?点数是计算出来的(upvotes - downvotes),而不是直接存储在 Schema 中。
图像模型:
var ImageSchema = new Schema({
name : String,
size : Number,
title : String,
body : String,
buf : Buffer,
date: { type: Date, default: Date.now },
comments : [CommentSchema],
meta : {
upvotes : Number,
downvotes : Number,
favs : Number,
uniqueIPs : [String],
tags : [String]
}
});
渲染图像的路线:
app.get('/images/:num?', function(req, res){
var query = model.ImagePost.find({});
query.where('date').lte(new Date());
query.desc('date');
query.exec(function (err, images) {
if (err) {
console.log(err);
// do something
}
var query = tagModel.Tag.find({});
query.exec(function (err, tags) {
if (err) {
console.log(err);
// do something
}
query = albumModel.Album.find({});
query.exec(function (err, albums) {
if (err) {
console.log(err);
// do something
}
res.render('blogs/index', { title: 'Images', imageList: images, tagList: tags, albumList: albums, dateFormatter: dateFormatter });
});
});
});
});
将图像呈现给客户端的 Jade 文件(部分):
#image
div.post
input(type='hidden', value=image.name + ',' + image.body + ',' + image.date);
button.imageValue(value= image.name, name= image._id)
div.albumImgChooseCover +
img.images(src='../images/' + image.name)
div.postDesc
a#single_1(href='../images/' + image.name, title= image.body + ' (Published: '+ formatter.format(image.date) +')')
img.zoom(src='../img/zoom.png')
a.various#box1(data-fancybox-type='iframe', href='/image/' + image._id.toHexString())
img.comments(src='../img/comments.png')
p.nrOfComments= image.comments.length
h2.subtitle= image.title
p.postDescContent= 'Points' + ': ' + (image.meta.upvotes - blog.meta.downvotes)
form.deleteButtonBox(action='/image/delete/' + image._id.toHexString(), method='POST')
input(class='deleteButton', type='submit', value='x')
a.various#box2(data-fancybox-type='iframe', href='/image/edit/' + blog._id.toHexString()) Edit
- if (image.meta.tags)
ul.tags
h3 Tags:
each tag in tagList
- if (image.meta.tags.indexOf(tag._id) != -1)
a(href='/tag/' + tag._id.toHexString())
span.tagInImage= tag.name