0
我有一個mongodb集合,其中每個文檔都可以通過特定的URL進行訪問。避免循環訪問由mongodb和express生成的URL
我們的目標是向用戶顯示一個隨機的文檔url,直到用戶看到集合中的所有文檔,然後整個集合將被「清除」以便再次訪問。
我曾考慮過使用cookie來實現它,但我還沒有找到辦法做到這一點。
該應用程序使用express for nodejs和mongodb的mongoose模塊構建。
Model.class:從路由器
var mongoose = require('mongoose'),
URLSlugs = require('mongoose-url-slugs'),
AutoIncrement = require('mongoose-sequence')(mongoose),
Schema = mongoose.Schema;
var dilemmaSchema = new Schema({
dilemma_title: String,
red_dilemma: String,
blue_dilemma: String,
red_dilemma_votes: {
type: Number,
default: 0
},
blue_dilemma_votes: {
type: Number,
default: 0
}
});
dilemmaSchema.plugin(AutoIncrement, {
inc_field: 'id'
});
dilemmaSchema.plugin(URLSlugs('dilemma_title'));
module.exports = mongoose.model('Dilemma', dilemmaSchema);
代碼片段:
dilemmaRouter.route('/next')
.get(function (req, res) {
Dilemma.count().exec(function (err, count) {
var random = Math.floor(Math.random() * count);
Dilemma.findOne().skip(random).exec(function (err, dilemma) { //This function is supposed to redirect to an unvisited URL, and mark it as visited
dilemmaID = dilemma._id;
res.redirect('/' + dilemma.id + '/' + dilemma.slug);
})
})
})
如何數據庫條目查找
dilemmaRouter.route('/:id/:slug')
.get(function (req, res) {
const _id = req.params.id;
const _slug = req.params.slug;
let query = {
id: _id,
slug: _slug
}
Dilemma.findOne(query, function (err, dilemma) {
if (err) {
console.log(err);
} else {
if (dilemma === null) {
res.redirect('/');
} else {
res.render('index', {
dilemma: dilemma
})
}
}
})
})
目前我還沒有任何用戶模型,因爲它主要是訪問我的網站的客人。但是,如果我要做一個,我怎麼能抓住一個用戶的IP地址,並讓用戶退出?另外,你不覺得這可以通過某種方式使用cookie嗎?對我來說,它似乎是最好的選擇(如果可能的話)。 順便說一句,我更新了我的帖子,如何生成數據庫條目的網址代碼片段。 –
關於ip,你可以從'req'中訪問它。但你也可以使用cookies,它會工作 – sheplu
哦,很高興知道。你有一個想法,我怎麼可以去用cookies來做呢?有沒有可能創建網址特定的cookie?所以我例如可以設置所有已訪問的頁面的cookie ='visited'。 –