【问题标题】:Making a Chat Applications [closed]制作聊天应用程序[关闭]
【发布时间】:2021-10-30 13:55:22
【问题描述】:

我正在尝试在 Axios 的帮助下制作一个聊天应用程序,但我在后端代码中遇到了一些问题。 当我向已创建的聊天室发布新消息时,它不会被添加到消息数组中。有人可以帮我解决这个问题,或者告诉我制作聊天应用程序的更好方法吗??

这是我的聊天室路由器

.post(isUser,(req,res,next)=>{
    Chat.findOne({chatroomId:req.userId+' '+req.params.matchId})
    .then((chat) =>{
        console.log(chat);
        if(chat === null){
            var classId = req.userId+' '+req.params.matchId;
            var message = req.body.message;
            var sender  = req.userId;
            Chat.create({
                chatroomId:classId,
                messages:{
                    message:message,
                    sender:sender
                }})
            .then((chat) =>{
                res.statusCode = 200;
                res.setHeader('Content-Type','application/json');
                res.json(chat);
            }, err => next(err) )
        }
        else{
            chat.messages.push({
                message:message,
                sender:sender
            });
            chat.save();
            res.statusCode = 200;
            res.setHeader('Content-Type','application/json');
            res.json(chat);
        }
    },err => next(err))
    .catch(err=> next(err))
})

【问题讨论】:

  • 这个问题实际上是无法回答的,就像目前一样。 1)我们无法运行此代码,因为它依赖于您的许多本地设置,没有人可以访问。见sscce.org 2) 你还没有真正描述问题到底是什么,而且因为我们无法运行代码(如#1 所述),我们也无法自己找出答案。

标签: node.js arrays mongoose axios chat


【解决方案1】:

save()函数是异步的,所以需要异步处理。 试试这个:

Previous code

chat.save();
res.statusCode = 200;
res.setHeader('Content-Type','application/json');
res.json(chat);

Improved code


chat.save((err,ch)=>{
       res.statusCode = 200;
       res.setHeader('Content-Type','application/json');
       res.json(ch);
 });

【讨论】:

  • 没有不行
  • @AbhishekShah sendermessage 值均未在 else 块中定义。它们在 if 块中定义。将这些变量的定义上移一级,然后重试
猜你喜欢
  • 1970-01-01
  • 2019-12-18
  • 1970-01-01
  • 2011-04-21
  • 2011-04-10
  • 1970-01-01
  • 2010-11-25
  • 2016-07-04
  • 1970-01-01
相关资源
最近更新 更多