2016-11-11 2 views
1

mongoose와 MongoDB를 처음 사용했습니다. Todo 목록을 저장하는 Rex-Redux 앱을 개발 중입니다. 모든 것을 묶는 webpack을 사용하고 있습니다.여러 파일에서 Mongoose를 사용하여 MongoDB에 연결

MongoDB에 여러 파일로 연결하는 가장 좋은 방법은 무엇입니까? 내 초기 app.jsx가 실행될 때 예를 들어, 다음 내 reducers.jsx 파일에 내가 몽구스는 영구 연결을 유지하는 것을 알고,하지만 난 시도 할 때마다

를 사용하는 ... 데이터베이스에

을 저장합니다 var mongoose = require('mongoose');

나는

를 사용하여 내가 별도의 테스트 응용 프로그램을 만들 때

WARNING in ./~/mongoose/lib/drivers/index.js Critical dependencies: 8:11-74 the request of a dependency is an expression @ ./~/mongoose/lib/drivers/index.js 8:11-74

, 나는 성공적으로 MongoDB를 쓸 수있는이 웹팩 오류

mongoose.connect() and the .save() methods, 모든 것이 하나의 파일에 보관됩니다.

감사

App.jsx는

var React = require ('react'); 
 
var ReactDOM = require ('react-dom'); 
 
var {Route, Router, IndexRoute, hashHistory} = require ('react-router'); 
 

 
var {Provider} = require('react-redux'); 
 

 
var TodoApp = require('TodoApp'); 
 

 
var actions = require('actions'); 
 
var store = require('configureStore').configure(); 
 
var TodoAPI = require('TodoAPI'); 
 

 

 
// Connect to MongoDB using mongoose 
 
var url = 'mongodb://joe:[email protected]:47487/reacttodo'; 
 
var mongoose =require('mongoose'); 
 
mongoose.connect(url); 
 

 

 
store.subscribe(()=>{ 
 
    var state = store.getState(); 
 
    console.log('new state',state); 
 
    TodoAPI.setTodos(state.todos); 
 
}); 
 

 
var initialTodos = TodoAPI.getTodos(); 
 
store.dispatch(actions.addTodos(initialTodos)); 
 

 
// load foundation 
 
$(document).foundation(); 
 

 
//app css 
 
require('style!css!sass!AppStyles'); 
 

 
ReactDOM.render(
 
    <Provider store={store}> 
 
    <TodoApp/> 
 
    </Provider>, 
 
    document.getElementById('app') 
 
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

+0

내가 틀릴 수도 있지만 프론트 엔드 프레임 워크를 사용하여 mongodb에 연결하려는 이유를 이해하지 못했습니까? – hyades

+0

다른 방법으로 연결할 수 있습니까? – joec

+1

노드/익스프레스 – hyades

답변

0

당신은 그래서 당신은 다른 모듈을 통해 액세스 할 수 있습니다 Mongoose을 필요로하고 server.js에 대한 새 연결을 열어야합니다.

는 모두 몸 파서에게

server.js을 표현 사용하는 가정 :

. . . 
var mongoose = require('mongoose'); 
var port  = process.env.PORT || 3000; 
var express = require('express'); 
var bodyParser = require('body-parser'); 
. . . 
var app    = express(); 
mongoose.connect("mongodb://localhost/MyApp"); 
. . . 
app.use(bodyParser.json()); 
. . . 
require('./app/routes.js')(app); 
app.listen(port); 
console.log('App listening on port ' + port); 

그런 다음, 당신은 쉽게 액세스 할 수 있습니다. mongoose schema을 설정한다고 가정 해 보겠습니다.

mySchema.js :

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var user = new Schema({ 
      name: {type: String, required : true} 
}); 

module.exports = mongoose.model('user', user); 

아니면 그냥 모든 사용자를 검색하거나 당신이 그것을 이름과 같은 몇 가지 특성을 가진 개체 req를 전달하는 가정하여, 사용자의 컬렉션에 새 사용자를 저장하려면 :

user.factory.js

require('mongoose'); 
var User = require('mySchema.js'); 

exports.getUsers = getUsers; 
exports.postUser = postUser; 

function getUsers() { 
    return new Promise(function (resolve, reject) { 
    var query = User.find({}); 
    query.exec(function(err, users) { 
     if (err){ 
      return reject({err : 'Error while fetching users'}); 
     } 
     // If no errors are found, it responds with a JSON of all users 
     return resolve(users); 
    }); 
    }); 
} 



function postUser(req) { 
    return new Promise(function (resolve, reject) { 
    // Creates a new User based on the Mongoose schema and the post body 
     var newUser = new User(req.body); 
     // New User is saved in the db. 
     newUser.save(function(err) { 
      console.log('err',err); 
      if (err){ 
       return reject({err : 'Error while saving new user'}); 
      } 
      // If no errors are found, it responds with a JSON of the new users 
      return resolve(req.body); 
     }); 
    }); 
} 

또한 http 요청을 가로채는 경로를 설정한다고 가정합니다. 예를 들어 새 사용자를 저장하라는 요청입니다.

경로.JS :

. . . 
var createNewUser = function(userName){ 

    var user = { 
        name : userName //Goofy 
    }; 

    console.log(user.name); //Goofy 

    postNewUser(user).then(function(response, err){ 
    if(err){ 
     console.log('Error while saving new user'); 
    } else { 
     console.log('User '+response+' successfully saved'); 
    } 
    }); 

} 

function postNewUser(user){ 
    return new Promise(function (resolve, reject) { 
    // Saves user data to the db 
    $http.post('/users', user) 
      .success(function(res) { 
      if(res.error){ 
       return reject(res.error); 
      } 
       return resolve(res); 
    }); 
    }); 
    } 

당신도 할 수 있습니다

var UserFactory = require('./factories/user.factory.js'); 

// Opens App Routes 
module.exports = function(app) { 

    /** Getting all the users **/ 
    app.get('/users', function(req, res) { 
    UserFactory.getUsers().then(function (users) { 
     res.json(users); 
    }, function (error) { 
     res.json(error); 
    }); 
    }); 

    /** Posting a new geometry **/ 
    app.post('/users', function(req, res) { 
    UserFactory.postUsers(req).then(function (user) { 
     return res.json(user); 
    }, function (error) { 
     res.json(error); 
    }); 
    }); 

} 

그리고는, 프런트 엔드에, 사용자는 버튼을 제출하고 당신이 createNewUser 함수를 호출에 클릭, 양식에 사용자 이름을 삽입 그래서 당신은 당신의 모듈 I 될 것

var mongoose = require('mongoose'); 
. . . 
global.mongoose = mongoose; 

희망을 필요로 할 필요가 없습니다 귀하의 server.js을 세계적으로 몽구스를 설정 도움이됩니다.

+0

그게 정말 도움이 - 나는'server.js'에서 성공적인 연결을 가지고 있지만 마지막 스 니펫에서 require ('mongoose')'를 시도하면 webpack 오류가 발생합니다 :'WARNING in ./~/mongoose/lib /drivers/index.js 중요 종속성 : 8 : 11-74 종속성 요청은 표현식입니다. @ ./~/mongoose/lib/drivers/index.js 8 : 11-74' – joec

+0

매우 이상합니다. NPM을 통해 몽구스를 설치 했습니까? 이 에러는'require ('mongoose');'line? 디버그를 다음과 같이 설정하십시오 :'require ('mongoose'). set ('debug', true);' – AndreaM16

+0

어쨌든 webpack의 의존성 문제 인 것 같습니다. 내가 틀렸을 수도있다. – AndreaM16

관련 문제