【问题标题】:Mongoose find latest entryMongoose 查找最新条目
【发布时间】:2013-02-24 20:49:21
【问题描述】:

我有一个如下所示的条目:

{
  "__v": 10,
  "_id": "50f8050ed714645500000002",
  "sid": "DI7gZ0sprJ",
  "lines": [
    {
      "text": "Well that's what some people say anyway",
      "_id": "50f80526d714645500000003",
      "user": "Player456"
    },
    {
      "text": "They're people just like the rest of us",
      "_id": "50f805925543712caf000005",
      "user": "Player123"
    },
  ],
  "title": "Test",
  "maxlines": 0
}

并有一个如下所示的 socket.io 脚本:

socket.on('sendchat', function (data) {
    Story.findOne({ sid: socket.room }, function(err, story){
        if (err) {
            console.log(err);
        }
        else if(story == null) {
            console.log(err);
        }
        else {
            io.sockets.in(socket.room).emit('updatechat', socket.username, data);
            story.maxlines = story.maxlines - 1;

            if (story.maxlines == 0) {
                // End Game Script - Redirect to view page
                io.sockets.in(socket.room).emit('gameover', slugs(story.title), socket.room);
            }
            //Save Story to DB
            story.lines.push({
                user: socket.username,
                text: data
            });
            story.save(function(err, story){
                if (err) {
                    console.log(err);
                }
                else {
                    console.log("Story Updated");
                }
            });
        };
    });
});

有没有办法检查 socket.username 是否等于已输入的最新行上的用户?

例如上面的 Player123 是最后一个进入一行的,所以如果 Player123 再次尝试它只会发出错误,但是如果 Player456 进入一行,那么 Player123 可以再次进入

我正在尝试创建一个简单的回合制游戏,该游戏会检查以确保轮到玩家时不能进入队伍

【问题讨论】:

  • 你的问题里连问号都没有。
  • @thejh 看起来我在完成问题之前保存了提交,现在更新

标签: node.js socket.io mongoose


【解决方案1】:

您可以直接检查story对象中lines数组的最后一项。如:

if (story.lines.length &&
    story.lines[story.lines.length-1].user === socket.username) {
    // error, same user is trying to enter another line
}

【讨论】:

  • 谢谢!,没有意识到我可以那样做,我想我必须对故事对象进行排序和限制。但是您的解决方案效果很好!
  • 有没有办法检查它是否是第一个条目?因为在这一刻,如果您第一个进入该行的人会出错,因为没有前一个要检查,我在想这样的事情吗? story.lines[story.lines.length-1].user == socket.username && story.maxlines < 10 但这似乎不起作用
  • @Tam2 当然,只有在lines 不为空时才进行检查。更新了答案。
猜你喜欢
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 2014-07-21
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
  • 1970-01-01
相关资源
最近更新 更多