2016-11-14 2 views
0

У меня есть метод Meteor, который выполняет вызов API, тогда ответ вызова сохраняется в коллекции пользователей. Я использую пакет Collection2 с моим проектом, и я немного потерял настройку для своего SimpleSchema.Сохранение результата API-вызова для коллекции, но получение ошибок при настройке SimpleSchema

Вот что ответ JSON выглядит с API вызова:

[{ "ключевое слово": "2i", "URL": "http://example.com", "название" : «Пример», «timestamp»: «2016-11-05 08:54:42», «ip»: «00.00.00.000», «clicks»: «2», «user»: «HweoSCY2ujscjJ9Zl»} {«keyword»: «2j», «url»: «http://example.com», «title»: «YouTube», «timestamp»: «2016-11-06 02:11:18», ф ":" 00.00.00.000" , "щелкает": "1", "пользователь": "HweoSCY2ujscjJ9Zl"}, { "ключевое слово": "2К", "URL": "http://example.com",» title ":" YouTube "," timestamp ":" 2016-11-08 03:35:12 "," ip ":" 00.00.00.000 "," clicks ":" 0 "," user ":" HweoSCY2ujscjJ9Zl " }]

Вот в настоящее время, как я был в состоянии сохранить эти данные в коллекцию пользователей:

Meteor.users.update(Meteor.userId(), { 
    $set: { 'shortURLs.URLS': result.data } 
}); 

Это работает и выглядит в БД:

screenshot

Мой вопрос что я хотел бы настроить SimpleSchema для этого, чтобы «timestamp» будет сохранена как Date вместо String, но каждый раз, когда я пытаюсь создать схему для нее, я просто получаю ошибки, такие как "After filtering out keys not in the schema, your modifier is now empty". Я пробовал много разных вариаций, чтобы попытаться заставить его работать, но ни один из них не был успешным, вот только в настоящее время, где он по адресу:

Schema.ShortURLs = new SimpleSchema({ 
    shortURLs: { 
     type: Object 
    }, 
    'shortURLs.$': { 
     type: Object 
    }, 
    'shortURLs.$.keyword': { 
     type: String, 
     optional: true, 
     label: "Keyword" 
    }, 
    'shortURLs.$.url': { 
     type: String, 
     optional: true, 
     label: "URL" 
    }, 
    'shortURLs.$.title': { 
     type: String, 
     optional: true, 
     label: "Title" 
    }, 
    'shortURLs.$.timestamp': { 
     type: Date, 
     optional: true, 
     label: "Timestamp" 
    }, 
    'shortURLs.$.ip': { 
     type: String, 
     optional: true, 
     label: "IP" 
    }, 
    'shortURLs.$.clicks': { 
     type: String, 
     optional: true, 
     label: "Clicks" 
    }, 
    'shortURLs.$.user': { 
     type: String, 
     optional: true, 
     label: "User" 
    }, 
}); 

Это прикрепляют помимо простого пользователя схемы:

... 
shortURLs: { 
    type: Schema.ShortURLs, 
    optional: true 
}, 
... 

и у меня есть, что прилагается к коллекции пользователей:

Meteor.users.attachSchema(Schema.User); 

Я не думаю, что есть проблема с тем, как я это прилагается, как у меня есть другие настройки SimpleSchemas точно так же и й я отлично работаю, я считаю, что проблема в том, как я написал этот конкретный текст. Любая помощь здесь была бы чрезвычайно оценена.

ответ

1

Вам нужно определить тип shortURLs в коллекции Meteor.users в type: [Schema.ShortURLs], т.е. список типа Schema.ShortURLs

Schema = {} 
Schema.ShortURLs = new SimpleSchema({ 
    keyword: { 
     type: String, 
     optional: true, 
     label: "Keyword" 
    }, 
    url: { 
     type: String, 
     optional: true, 
     label: "URL" 
    }, 
    title: { 
     type: String, 
     optional: true, 
     label: "Title" 
    }, 
    timestamp: { 
     type: Date, 
     optional: true, 
     label: "Timestamp" 
    }, 
    ip: { 
     type: String, 
     optional: true, 
     label: "IP" 
    }, 
    clicks: { 
     type: String, 
     optional: true, 
     label: "Clicks" 
    }, 
    user: { 
     type: String, 
     optional: true, 
     label: "User" 
    }, 
}); 

Schema.User = new SimpleSchema({ 
... 
    shortURLs: { 
     type: [Schema.ShortURLs], 
     optional: true 
    }, 
... 
}); 

... 

Meteor.users.attachSchema(Schema.User); 
+0

Большое спасибо за ответ, мне удалось заставить его работать с этим. У меня только один вопрос, всякий раз, когда я вызываю этот метод, я вижу, что такое сообщение появляется в моей консоли для каждого массива: '' SimpleSchema.clean: autoconverted value 2016-11-11 23:44:28 from string to object для shortURLs . $. отметка времени "'. Вы знаете, как лучше это сделать? В некоторых случаях результат API возвращает 100+, так что, увидев, что это всплывающее окно, которое много раз заставляет меня думать, что я, вероятно, не делаю что-то правильно/наиболее эффективно, но, возможно, я ошибаюсь. Любой вход очень оценен, спасибо снова! :) – U54

+0

Это нормально, так как необработанный тип значения даты, возвращаемого из api, является строкой. Вы можете остановить это, установив 'SimpleSchema.debug = false', но также можете пропустить другие предупреждения из пакета SimpleSchema. – JeremyK

Смежные вопросы