画像をアップロードすると、アップロードされた画像がサムネイルに並べて表示されるアプリケーションに取り組んでいます。フィルターの可能性を実装して、たとえば降順で最初に最も多くのポイントを持つ画像のように、画像を別の順序で表示できるようにしたいと考えています。
これをどのように行うべきかについての良い解決策を思いつくのに苦労しています.私が考えることができる唯一のことは、これのための新しいルートを作成することです(私が現在使用しているものと同じです, 以下), しかし別の並べ替え。
ただし、これは DRY コーディングであり、さらに多くの並べ替えオプションを計画しているため、特に良いことではありません。
これに関して 2 つの質問があります。
- これを達成するためのより良い方法はありますか (ルートを呼び出す必要がなく、代わりにクライアント側で実行するためのソリューションですか? または、ルートにパラメーターを渡し、if ステートメントを使用してソート方法を決定することもできます) ?
- サーバー側で並べ替えを行う必要がある場合、ポイントでこれを行うにはどうすればよいですか? ポイントの量は計算され (賛成票 - 反対票)、スキーマに直接保存されません。
画像のモデル:
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