2017-08-15 1 views
0

« événements » J'ai créé un projet vide avec la commande suivante:réagir natif incapable de résoudre le module

react-native init demoProject 

après l'installation

npm install -g react-native-cli 

j'ai installé MongoDB avec la commande suivante:

npm install mongodb --save 

Dans le fichier package.json je donne les résultats suivants:

"dependencies": { 
"events": "^1.1.1", 
"mongodb": "^2.2.31", 
"react": "16.0.0-alpha.12", 
"react-native": "0.47.1" 

},

Dans le fichier index.ios.js Je suis en train d'importer le mongodb comme suit:

var MongoClient = require('mongodb').MongoClient; 

Après la construction du projet Xcode je cette erreur:

bundling failed: "Unable to resolve module `events` from `/Users/rzilahi/work/demo01/node_modules/mongodb/lib/apm.js`: Module does not exist in the module map 

qu'est-ce que je fais mal?

+1

bibliothèque MongoDB est pour nodejs, non réagir natif. Dans nodejs vous avez une bibliothèque déjà présente, mais pas présente dans la réaction native. En fait, si vous voulez installer cette librairie sur reac native, vous devrez installer beaucoup de librairies comme event/util/crypto. Par exemple, la librairie crypto n'est pas acceptée par natif, vous devrez installer [reac-native-crypto] (https://github.com/mvayngrib/react-native-crypto). Aussi, je ne pense pas que c'est le travail de votre application mobile d'interagir directement avec mongodb –

Répondre

1

Pourquoi importez-vous MongoClient à index.ios.js? Il ne doit pas être importé dans l'index ou tout autre fichier de votre application. Les requêtes de base de données doivent être effectuées dans un webservice. Ainsi, dans votre application, vous pouvez utiliser fetch pour récupérer des données à partir d'un service Web et le rendre avec un FlatList ou un composant de votre choix. Vous pouvez créer un projet NodeJS sur le port 1337 (exemple de port) et exécuter le serveur de nœud. Dans ce projet de nœud, vous devez importer MongoClient et interroger le DB pour les données et utiliser res.send ou res.json pour renvoyer les données en réponse. Donc, si vous êtes en mesure d'accéder à votre webservice au http://localhost:1337/getdata, vous êtes tous ensemble.

Vous devrez peut-être utiliser votre adresse IP réelle de l'ordinateur dans fetch, comme:

fetchData(){ 
    fetch('http://192.168.0.4:1337/getdata') 
    .then((response) => response.json()) 
    .then((responseJson) => { 
     this.setState({data: responseJson}) 
    }) 
    .catch((error) => { 
     alert(error); 
    }); 
} 

Et votre serveur de noeud ressemblerait à quelque chose comme:

var express = require('express'), 
    bodyParser = require('body-parser'), 
    mongoose = require('mongoose'); 

    mongoose.connect('mongodb://localhost/mydb'); 

var db = mongoose.connection; 
mongoose.Promise = global.Promise; 

var app = express(); 

//create the Posts Schema or import it. 

app.get("/getdata", function(req, res){ 

    Posts.find({}, function(e,doc){ 
     if(doc==null){ 
      res.send("NO POSTS"); 
     } 
     else{ 
      res.json(doc); 
     } 
    }); 

}); 

app.set('port', (process.env.PORT || 1337)); 

app.listen(app.get('port'), function(){ 
    console.log("Server started on port: " + app.get('port')); 
}); 
+0

bonjour! merci pour votre réponse. :) Donc, le getdata est fondamentalement le point final pour le mongodb lui-même? Merci de préciser que je n'ai pas besoin d'importer le client mongo pour indexer js aussi! :) –

+0

Mis à jour la réponse. Vérifiez la partie de noeud pour la clarification. En savoir plus sur la mangouste et les requêtes et cela devrait être facile pour vous. Est-ce que cela répond à votre requête? – Somename

+0

J'ai ajouté le paquetage mongoose, et j'ai demandé dans le fichier js comme vous l'avez fait dans votre exemple. Encore. 'erreur: le regroupement a échoué:" Impossible de résoudre le module 'util' de'/Users/rzilahi/travail/demo01/node_modules/mongoose/lib/schematype. js' J'ai fait mes recherches sur google, mais je n'ai pas pu résoudre l'erreur. :(toute idée? –