AJAX请求在随机时刻和顺序中与MongoDB编写Epipe问题

时间:2019-05-15 15:00:33

标签: javascript jquery node.js ajax mongodb

我在NodeJS中处理2个已连接的Web应用程序。我们称它们为A和B。大多数都可以,但是...

在应用程序A中,有一个视频流,用户可以在表单中提问。我使用jquery和ajax提交表单并发送发布请求,该请求将一个问题插入MongoDB中-每个都作为单独的文档。 App B也使用jquery和ajax从集合中读取问题。它每5秒发出一次获取请求-我使用了setInterval。然后我们开始。

当我同时启动这两个应用程序一段时间后,但应用程序A随机发送了一个帖子请求,其中包含先前添加的问题。有时应用B会删除数据库中的所有文档,等等。我想这背后有逻辑,但我看不到。

下面是有问题的代码段。

应用A

API部分:

    index.post('/ask', (req, res) => {
      var question = req.body.question;
      var person = req.body.person;

        mongo.connect(url, {useNewUrlParser:true}, (err, dbo) => {
          if(err) return;
          else{
            var db = dbo.db('question');
            db.collection('asked').insertOne({question:question, who:person}, (err) => {
              if(err) return;

            })
          }
        })
    })

ajax部分:

      $('#ask_question').on('submit', function(event) {
        event.preventDefault();
        event.stopImmediatePropagation();

        var question = $('#inputDefault').val();
        var who = $('#exampleSelect1').val();
        console.log(question + ' '+ who);
        $.ajax({
          url: '/ask',
          method: 'POST',
          contentType: 'application/json',
          data: JSON.stringify({
            question: question,
            person:who
          }),
          success: function(response) {
            console.log(response);
          }
        });
      });

应用B

API:


    index.get('/asked', (req, res) => {
        mongo.connect(url, {useNewUrlParser:true}, (err, dbo) => {
          if(err) return;
          else{
            var db = dbo.db('question');
            db.collection('asked').find({}).toArray((err, result) => {
              if(err) return;
              if(!result) return;
              else res.send(result);
          })
        }
      })
    })

ajax部分:

    setInterval(()=>{
    $.ajax({
      url: '/asked',
      method:'GET',
      contentType: 'application/json',
      async: false,
      success: function(response) {
        var form = $('#asked');
        $('#asked').empty();
        $.each(response, function(i, question) {
          form.append('<li>'+question.question+ ' ('+question.who+')</li>');
        });
      }
    });
    },5000);

如果您想知道为什么我使用return,那是因为我试图防止MongoDB崩溃。一段时间(例如15分钟左右)后,我收到错误消息:

.../node_modules/mongodb/lib/operations/mongo_client_ops.js:474
      throw err;
      ^

Error: write EPIPE
    at Object.exports._errnoException (util.js:870:11)
    at exports._exceptionWithHostPort (util.js:893:20)
    at WriteWrap.afterWrite (net.js:763:14)

在两个应用程序中都发生。我想这是一个简单的僵局,但不知道如何防止这种情况。

如果您愿意,我将提供项目的较大部分。我找不到解决这些问题的方法。

0 个答案:

没有答案