var mongoose = require('mongoose'); var Schema = mongoose.Schema; const NewsAPI = require('newsapi'); const { response } = require('express'); const newsapi = new NewsAPI('87ca7d4d4f92458a8d8e1a5dcee3f590'); var current_date = new Date(Date.now()); var old_date = new Date(Date.now() - 864e5 - 864e5); var current_date2 = JSON.stringify(current_date); var old_date2 = JSON.stringify(old_date); var today = current_date2.slice(1,11); var day_b4_yesterday = old_date2.slice(1,11); NewsLibrary = function(correct){ var promise = new Promise(function(resolve, reject){ if (correct){ newsapi.v2.everything({ q: 'food and beverage', sources: '', domains: '', from: day_b4_yesterday, to: today, language: 'en', sortBy: 'relevancy', page: 2 }).then(response => { resolve(response); }) }else{ reject(new Error("Error loading news")) } }); return promise; } NewsLibrary(true).then(function(response){ console.log(response); var NewsSchema = new Schema(response); module.exports = mongoose.model('News', NewsSchema); }).catch(function(err){ console.log(err) });
3 Réponses :
Vous pouvez l'affecter à l'aide de Global ou global, NodeJS prend en charge les deux: P>
Global.Feed = réponse; p> blockQuote>
ou p>
Global.Feed = réponse; p> blockQuote>
Lorsque j'essaie de consoler la valeur de l'alimentation en dehors de la fonction alors, cela me renvoie indéfini.
Vous voulez dire l'aliment lui-même ou la valeur globale.
Je pense que le problème principal est que la méthode est asynchrone.
var model = newsapi.v2.everything({ q: 'food and beverage', sources: '', domains: '', from: day_b4_yesterday, to: today, language: 'en', sortBy: 'relevancy', page: 2 }).then(response => { console.log(response); var NewsSchema = new Schema(response); return mongoose.model('News', NewsSchema); }); module.exports = { model };
J'ai essayé cet exemple, mais cela jette une erreur indiquant le schéma n'a pas été enregistré pour le modèle "Actualités".
J'avais fait une erreur dans le code précédent l'a corrigé s'il vous plaît essayez à nouveau. Rappelez-vous que nécessitant ce fichier reviendra une promesse
En fait, j'ai essayé quelque chose de similaire à ce que vous avez suggéré de ce que c'est la même erreur.
Var Newsschema = Newsapi.v2.Touththing ({Q: 'Food and Beverage', Sources: '', Domaines: '', à partir de: Day_b4_yesterday, à: Aujourd'hui, langue: «FR», Sortby: «Pétance» , Page: 2}). Ensuite (réponse => {console.log (réponse); renvoyer mangoose.model ('Actualités', nouveau schéma (réponse));}); module.exports = {newschema}; code>
Je n'ai pas beaucoup travaillé avec la mangouste. Mais cela n'a-t-il pas besoin de définir le schéma avant la main. Si vous avez besoin d'inerter sans savoir sur le schéma, essayez Stackoverflow.com/Questtions/5370846/... . Mais dans la plupart des cas, vous devez savoir sur le schéma si les données.
Vous avez pris une variable globale flux code>. Mais vous stockez la réponse dans
fenêtre.feed code>.
Donc, vous devriez le stocker dans
flux code> variable dans le bloc
puis code> bloc, c'est la première chose. P>
Est-ce que cela répond à votre question? Comment puis-je retourner la réponse d'un appel asynchrone? < / a>