2017-08-15 42 views
0

我已經創建了下面的命令空項目模塊「事件」:反應本地無法解決

react-native init demoProject 

安裝

npm install -g react-native-cli 

然後我安裝的MongoDB使用以下命令後:

npm install mongodb --save 

package.json文件我有以下幾點:

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

},

index.ios.js文件我想導入的MongoDB如下所示:

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

在Xcode建設項目後,我有這樣的錯誤:

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 

我在做什麼錯?

+1

的MongoDB庫是的NodeJS,不反應原生。在nodejs中,你有一些庫已經存在,但不存在於原生的反應中。實際上,如果你想在反應本機上安裝這個庫,你將不得不安裝很多庫,比如event/util/crypto。例如,加密庫不被接受,你需要安裝[react-native-crypto](https://github.com/mvayngrib/react-native-crypto)。另外我不認爲這是你的移動應用程序的工作,直接與mongodb –

回答

1

爲什麼要將MongoClient導入到index.ios.js?它不應該被導入索引或應用程序的任何其他文件中。數據庫查詢應該在web服務中完成。因此,在您的應用中,您可以使用fetch從Web服務中檢索數據,並使用FlatList或選擇的組件對其進行呈現。您可以在端口1337(示例端口)上創建一個NodeJS項目並運行節點服務器。在該節點項目中,您需要導入MongoClient並查詢數據庫中的數據,並使用res.sendres.json作爲響應發回數據。因此,如果您能夠訪問您的網絡服務http://localhost:1337/getdata,那麼您已經完成了設置。

您可能需要使用計算機的實際IP地址fetch,如:

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

和你的節點服務器看起來是這樣的:

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

你好!謝謝你的回答。 :)所以getdata基本上是mongodb本身的端點?謝謝澄清,我不需要導入mongo客戶端也索引js! :) –

+0

更新了答案。檢查節點部分是否有所澄清。瞭解貓鼬和查詢,它應該很容易。這是否回答您的查詢? – Somename

+0

我確實添加了貓鼬包,並且需要像在你的例子中那樣在js文件中。仍然。當我構建的應用程序,它錯了,出現以下錯誤: '錯誤:捆綁失敗:「無法解析'/用戶/ rzilahi/work/demo01/node_modules/mongoose/lib/schematype模塊'util。 js' 我在谷歌上做了我的研究,但是無法解決這個錯誤。:(任何想法? –