복붙노트

[MONGODB] 가장 좋은 방법은 Node.js를를 사용하여 MongoDB에 연결하려면 [중복]

MONGODB

가장 좋은 방법은 Node.js를를 사용하여 MongoDB에 연결하려면 [중복]

나는 노드와 몽고를 사용하는 방법에 대한 몇 가지 가이드를 읽어했습니다, 그들은 모두 다른 데이터베이스에 연결하는 것. 나를 위해 잘 작동 하나의 특정 방법이었다 :

MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) {
  if(err) { return console.dir(err); }

  db.createCollection('users', function(err, collection) {});

  //Do all server/database operations in here

});

그러나,이 비효율적 / 나에게 이상한 것 같다, 나는 새 사용자를 만들거나 정보를 검색처럼) 데이터베이스에 app.get가 (이 때마다 다시 연결해야합니다.

더 나에게 맞는 것 같다 또 다른 방법은

var mongoose = require("mongoose")
var db = mongoose.connect("localhost:27107/users");

db.createCollection('users', function(err, collection) {});

나는 몇몇 사이트는이 라인을 따라 뭔가를 본 적이 있지만 나는 개인적으로 일에 위의를 얻을 수 없습니다. 나는 오류 형식 오류가 계속 : db.createCollection는 함수 서버 측 아닙니다. 위의 코드가없는 작업을 수행하는 이유 첫 번째 코드는 좋은 대안이며, 경우에 따라서, 내 질문이며,이 작업을 수행하는 다른 방법이있는 경우.

해결법

  1. ==============================

    1.당신은 예를 들어, (예를 들어 DB) 연결을 유지하기 위해 전역 변수를 사용할 수 있습니다 :

    당신은 예를 들어, (예를 들어 DB) 연결을 유지하기 위해 전역 변수를 사용할 수 있습니다 :

    var db = null // global variable to hold the connection
    
    MongoClient.connect('mongodb://localhost:27017/', function(err, client) {
        if(err) { console.error(err) }
        db = client.db('test') // once connected, assign the connection to the global variable
    })
    
    app.get('/', function(req, res) {
        db.collection('test').find({}).toArray(function(err, docs) {
            if(err) { console.error(err) }
            res.send(JSON.stringify(docs))
        })
    })
    

    당신이 원하는 경우 또는, 당신은 또한이 콜백 인수없이 호출하면 MongoClient에 의해 반환되는 약속 개체를 사용할 수 있습니다 :

    var conn = MongoClient.connect('mongodb://localhost:27017/') // returns a Promise
    
    app.get('/', function(req, res) {
        conn.then(client=> client.db('test').collection('test').find({}).toArray(function(err, docs) {
            if(err) { console.error(err) }
            res.send(JSON.stringify(docs))
        }))
    })
    

    내가 두 번째 예에서 ES6 지방 화살표 함수 정의를 사용하는 것을 참고하시기 바랍니다.

    당신은 당신이 MongoClient 때마다 호출해서는 안 절대적으로 정확합니다. 두 개 이상의 좋은 일들을 달성하는 연결 풀을 만들기 위해 MongoDB를 Node.js를 드라이버를 전역 변수 또는 약속을 허용 사용 :

    편집 2018년 8월 24일 : Node.js를 드라이버 버전 3.0 및 새로운 반환 클라이언트 객체 대신 데이터베이스 개체의 MongoClient.connect () 메소드. 위 예제는 최신 Node.js를 드라이버 버전을 최신으로 유지하기 위해 수정되었습니다.

  2. ==============================

    2.당신은이 방법을 사용할 수 있습니다 :

    당신은이 방법을 사용할 수 있습니다 :

    의 server.js 파일이 :

    import path from 'path'
    import express from 'express'
    import bodyParser from 'body-parser'
    import morgan from 'morgan'
    import db from './server/database'
    import routes from './server/routes'
    
    import webpack from 'webpack'
    import webpackDevMiddleware from 'webpack-dev-middleware'
    import webpackHotMiddleware from 'webpack-hot-middleware'
    import webpackConfig from './config/webpack'
    const app = express()
    const port = process.env.PORT || process.env.NODE_PORT
    const compiler = webpack(webpackConfig)
    
    db(λ => {
      app.use(webpackDevMiddleware(compiler, { noInfo: true, publicPath: webpackConfig.output.publicPath }))
      app.use(webpackHotMiddleware(compiler))
      app.use(morgan('dev'))
      app.use(bodyParser.json({ limit: '20mb' }))
      app.use(bodyParser.urlencoded({ limit: '20mb', extended: false }))
      app.use('/static', express.static('static'));
      //app.use('/api', jwt)
      app.use('/api', routes())
    
      app.set('json spaces', 2)
    
      app.get('*', function(request, response) {
        response.sendFile(path.resolve(__dirname, 'index.html'))
      })
    
      app.listen(port, (error) => {
        if (error) {
          console.error(error)
          throw error
        } else {
          console.info(`==> 🌎  Listening on port ${port}. Open up http://localhost:${port}/ in your browser.`)
        }
      })
    })
    

    서버 / database.js

    import mongoose from 'mongoose'
    
    export default callback => {
      const { MONGO_URL, MONGO_PORT, MONGO_DB } = process.env
    
      mongoose.connect(`mongodb://${MONGO_URL}:${MONGO_PORT}/${MONGO_DB}`, error => {
        if (error) {
          console.error('Please make sure your MongoDB configuration is correct and that service is running')
          throw error
        }
      })
    
      callback()
    }
    

    그럼 당신은 예를 들어, 몽구스 모델을 정의해야합니다 :

    import mongoose, { Schema } from 'mongoose'
    
    const ideaSchema = new Schema({
      title: {
        type: String,
        required: true
      },
      slug: {
        type: String,
        required: true,
        unique: true
      },
      description: {
        type: String,
        required: true
      }
    })
    
    export default mongoose.model('Idea', ideaSchema)
    

    그리고 단지 컨트롤러이 방법을 사용합니다 :

    import HttpStatus from 'http-status-codes'
    import mongoose from 'mongoose'
    import sanitize from 'sanitize-html'
    import slug from 'slug'
    import Idea from '../models/idea'
    
    const findAllIdeas = (req, res) => {
      Idea.find()
        .select('user title slug createdAt updatedAt')
        .populate({
          path: 'user',
          select: 'firstName lastName'
        })
        .then(data => res.status(HttpStatus.OK).json(data))
        .catch(error => res.status(HttpStatus.BAD_REQUEST).json(error))
    }
    
    export default { findAllIdeas, findIdeaBySlug, createIdea, addComment }
    

    각 GET 요청에 대해 MongoDB를 연결할 필요가 없습니다.

    그래서 경로는 같이 표시됩니다. 아주 간단합니다 :

    import { Router } from 'express'
    import controller from '../controllers/idea'
    
    const router = Router()
    
    router.route('/')
      .get(controller.findAllIdeas)
      .post(controller.createIdea)
    
    router.route('/:slug')
      .get(controller.findIdeaBySlug)
    
    router.route('/comment')
      .post(controller.addComment)
    
    export default router
    
  3. ==============================

    3.나는 표현의 MongoDB의 연결을 다시 사용하는 방법에 대한 자습서를 작성했습니다. 당신은 여기에서 볼 수 있습니다. 기본적으로, 당신이 그런 expressjs와 함께 사용할 수있는 간단한 모듈입니다 :

    나는 표현의 MongoDB의 연결을 다시 사용하는 방법에 대한 자습서를 작성했습니다. 당신은 여기에서 볼 수 있습니다. 기본적으로, 당신이 그런 expressjs와 함께 사용할 수있는 간단한 모듈입니다 :

    var connection = require('./dbconnection');  
    // url and optional config.
    app.use(connection(app, 'mongourl', {});
    

    그리고 여기에 연결을위한 코드는 다음과 같습니다

    module.exports = function(app, uri, opts) {  
        if (typeof uri !== 'string') {
            throw new TypeError('Error: Unexpected mongodb connection url');
        }
    
        opts = opts || {};
        var property = opts.property || 'db';
    
        var connection;
        return function expressMongoDb(req, res, next) {
            if (!connection) {
                connection = MongoClient.connect(uri, opts);
            }
    
            connection
                .then(function (db) {
                    req[property] = db;
                    app.set('mongodb', db);
                    next();
                })
                .catch(function (err) {
                    connection = undefined;
                    next(err);
                });
        };
    };
    
  4. ==============================

    4.다음과 같이 내 이동 -에 코드입니다 :

    다음과 같이 내 이동 -에 코드입니다 :

    mongoose.connect(YOUR_URL ,function(err) {
      if (err) {
        console.log(err);
      }else{
        console.log("Connected to DB"); 
      }
    });
    

    문제가 될 수, 27107 : 또한 단지 로컬 호스트에 연결을 시도.

  5. from https://stackoverflow.com/questions/38485575/best-way-to-connect-to-mongodb-using-node-js by cc-by-sa and MIT license