Обещаю заблокировать мою ссылку на MongoDB / Node.js - PullRequest
0 голосов
/ 11 июня 2018

Я использую Mongoose для MongoDb с Node.js / React / GraphQL.

У меня есть документ Article, который связан с другим документом Event, который связан с несколькими документами Tags.Когда я пытаюсь сохранить свои документы, у меня всегда есть ожидающее обещание включить теги в документ события. Результат: - Статья сохранена, связанная с событием - Событие сохранено, но не связано с тегами - Теги сохранены, но не связаны с ожидаемым событием: - Статья сохранена, связана с событием - Событие сохранено и связано с тегами - ТегиСохранено и связано с событием

Два раза, когда мой сервер в начале работал без ожидания и ошибки.Поэтому я думаю, что моя проблема - это проблема времени, но я не знаю, как ее решить.Я пытаюсь установить время ожидания, но безуспешно.


У меня есть следующая схема в Mongoose / MongoDb

//mode/event.js
'use strict';
//import dependency
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

//create new instance of the mongoose.schema. the schema takes an object that shows
//the shape of your database entries.
var EventSchema = new Schema({
  createdAt: {
    type: Date,
    default: Date.now
  }, 
  name: {
    type: String,
    required: 'Kindly enter the name of the event'
  },
  description: String,
  site_web: String,  
  themes: {
      type: String,
      enum: ['Economics', 'Politics', 'Bitcoins', 'Sports'],
      default: 'Economics'
  },
  picture: String,
  event_date_start: Date,
  event_date_end: Date,
  type_event: {
      type: String,
      enum: ['Confrontation','Standard'],
      default: 'Standard'
  },
  teams: [{ 
        type: mongoose.Schema.Types.ObjectId, 
        ref: 'Team'
    }],
  tags: [{ 
        type: mongoose.Schema.Types.ObjectId, 
        ref: 'Tag'
    }]
});

//export our module to use in server.js
module.exports = mongoose.model('Event', EventSchema);

//model/tag.js
'use strict';
//import dependency
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

//create new instance of the mongoose.schema. the schema takes an object that shows
//the shape of your database entries.
var TagSchema = new Schema({
  name: {
    type: String,
    required: 'Kindly enter the name of the tag'
  },
});

//export our module to use in server.js
module.exports = mongoose.model('Tag', TagSchema);

//model/article.js
'use strict';
//import dependency
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

//create new instance of the mongoose.schema. the schema takes an object that shows
//the shape of your database entries.
var ArticleSchema = new Schema({
  // _id: String,
  createdAt: {
    type: Date,
    default: Date.now
  }, 
  event: { 
        type: mongoose.Schema.Types.ObjectId, 
        ref: 'Event',
        required: 'Kindly enter the event'
    },
  body: String,  
  type: {
    type: String,
    enum: ['Confrontation','Standard'],
    default: 'Standard'
  },
  url_source: String,
  themes: {
      type: String,
      enum: ['Economics', 'Politics', 'Bitcoins', 'Sports'],
      default: 'Economics'
  },
  type_media: {
    type: String,
    enum: ['video', 'web', 'podcast'],
    default: 'web'
  },

  article_date: Date,

});


//export our module to use in server.js
module.exports = mongoose.model('Article', ArticleSchema);


В моей схеме Node.js /GraphQL У меня есть функция разрешения

createArticle: {
      type: ArticleType,
      args: {
          event: {type: EventCreateType},
          body: {type: GraphQLString},
          type: {type: articleType},
          url_source: {type: GraphQLString},
          themes: {type: themesType},
          //type_media: {type: new GraphQLList(mediaType)}
          type_media: {type: mediaType},
          article_date : {type: GraphQLString}
      },

      resolve: async (source, params)  => {

         if (params.event) {

            var eventparams = params.event;
            var tagparams = params.event.tags;
            params.event.tags = null;
            params.event = null;


            var tagIds = [];
            //traitement des tags


            var inEvent = await EventsModel.findOne({'name':eventparams.name});
            if(!inEvent){
              inEvent = new EventsModel(eventparams);


              if(tagparams){
                if(tagparams.length !=0){
                  tagIds = await tagparams.map(async function(c) {

                    var inTag = await TagsModel.findOne(c);
                    if(!inTag){
                      inTag = new TagsModel(c);   
                      inTag.save(function(err) {
                            if (err) {
                              console.log(err);
                            }});                  
                    }                    
                    return inTag;

                  });
            console.log('******************************Le tableau**************************');
            console.dir(tagIds);
            console.log('********************************************************');
                 //inEvent.tags = tagIds;
                 Promise.all(tagIds).then(function(savedObjects) {
                     console.log('********************************************************');
                    console.log('Le Inside Tab:',savedObjects);
                    console.log('********************************************************');
                    // Do something to celebrate?
                   inEvent.tags = savedObjects;
                  }).catch(function(err) {
                    // one or both errored
                    console.log(err);
                  });
                }

              }
              inEvent.save(function(err) {
                            if (err) {
                              console.log(err);
                            }});
            }


            console.log('*******************propriete inEvent*****************************');
            console.dir(inEvent);
            console.log('********************************************************');
            var articleModel = new ArticlesModel(params);
            articleModel.event = inEvent;
            console.log('***********************propriete Article before save****************');
            console.dir(articleModel);
            console.log('********************************************************');




            articleModel.save(function(err, article) {
                            if (err) {
                              console.log(err);
                            }
                            if (article) {
                   return ArticlesModel.findById(article._id)
                      .populate('article')
                      .populate('event')
                      .exec(function(error, articles) {
                          console.log('article saved: succes')
                          articles.article.articles.push(articles);
                          articles.article.save(function(err, article) {
                            if (err) {
                              console.log(err);
                            }
                          });
                          return articles;
                      })
                  }


                          });

            return articleModel;

        }
        else{
               console.log('verif 3');             
        }

         console.log('verif 4');
      }
    },

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...