복붙노트

[MONGODB] 형식 오류가 : db.collection는 함수가 아닙니다

MONGODB

형식 오류가 : db.collection는 함수가 아닙니다

나는 MLAB에 만든 것으로 데이터베이스에 데이터를 게시하려고 내가이 오류를 얻고있다 그러나 나는 무슨이이 주제에 틀렸어도 읽고 이전에 묻는 질문에가는 모르지만 나는 나의 오류를 해결할 수 아니다 나는이 새로운 오전. 그래서 여기 내가 구현하려고 코드를 게시하고 있는데 그것은이 튜토리얼 https://medium.freecodecamp.com/building-a-simple-node-js-api-in-under-30-minutes-에서 가져옵니다 a07ea9e390d2.

server.js

const express = require('express');
const MongoClient = require('mongodb').MongoClient;
const bodyParser = require('body-parser');

const db = require('./config/db');


const app = express();

const port = 8000;

app.use(bodyParser.urlencoded({extened:true}));


MongoClient.connect(db.url,(err,database) =>{

    if (err) return console.log(err)
    require('./app/routes')(app,{});
    app.listen(port,() => {
        console.log("We are live on"+port); 
    });

})

db.js

module.exports = {
  url : "mongodb://JayTanna:Jay12345@ds147510.mlab.com:47510/testing"
};

하는 index.js

const noteroutes = require('./note_routes');

module.exports = function(app,db)
{
    noteroutes(app,db);

};

note_routes.js

module.exports = function(app, db) {
  app.post('/notes', (req, res) => {
    const note = { text: req.body.body, title: req.body.title };
    db.collection('notes').insert(note, (err, result) => {
      if (err) { 
        res.send({ 'error': 'An error has occurred' }); 
      } else {
        res.send(result.ops[0]);
      }
    });
  });
};

해결법

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

    1.당신은 무엇을 당신의 경로 /하는 index.js 내보내기 기능을 예상하는 등 두 번째 인수로 데이터베이스를 전달할 필요가 어디 server.js에서는 빈 객체를 전달합니다.

    당신은 무엇을 당신의 경로 /하는 index.js 내보내기 기능을 예상하는 등 두 번째 인수로 데이터베이스를 전달할 필요가 어디 server.js에서는 빈 객체를 전달합니다.

    PFB 업데이트 server.js :

    const express = require('express');
    const MongoClient = require('mongodb').MongoClient;
    const bodyParser = require('body-parser');
    
    const db = require('./config/db');
    
    const app = express();
    
    const port = 8000;
    
    app.use(bodyParser.urlencoded({extended:true}));
    
    MongoClient.connect(db.url,(err,database) =>{
    
        if (err) return console.log(err)
        //require('./app/routes')(app,{});
        //check below line changed
         require('./app/routes')(app, database);
        app.listen(port,() => {
            console.log("We are live on"+port); 
        });
    
    });
    
  2. ==============================

    2.나는 그것을 시도하기 때문에 단지 2.2.33를 MongoDB를 아래로 이동라고 대답 투표하고 일했다, 그러나 나는 이상한 느낌 그래서 난 당신이 버전을 유지할 수있는 솔루션을 찾을 수 있도록 단지 문제를 해결하기 위해 다운 그레이드에 대한> = 3.0. 사람이이 문제를 발견하고 자신의 문제는 허용 대답과 같은 빈 참조를 전달하지 않은 경우, 출력이 해결 방법을 시도해보십시오.

    나는 그것을 시도하기 때문에 단지 2.2.33를 MongoDB를 아래로 이동라고 대답 투표하고 일했다, 그러나 나는 이상한 느낌 그래서 난 당신이 버전을 유지할 수있는 솔루션을 찾을 수 있도록 단지 문제를 해결하기 위해 다운 그레이드에 대한> = 3.0. 사람이이 문제를 발견하고 자신의 문제는 허용 대답과 같은 빈 참조를 전달하지 않은 경우, 출력이 해결 방법을 시도해보십시오.

    당신은 실행하면 ..

    MongoClient.connect(db.url,(err,database) =>{ }
    

    MongoDB의 버전> = 3.0, 즉 데이터베이스 변수는 ( '무엇이든') database.collection에 액세스하려고하는 객체의 부모 객체는 실제로. 올바른 개체에 액세스하려면 수행하여였습니다 나를 위해, 데이터베이스 이름을 참조 할 필요가

    MongoClient.connect(db.url,(err,database) =>{ 
      const myAwesomeDB = database.db('myDatabaseNameAsAString')
      myAwesomeDB.collection('theCollectionIwantToAccess')
    }
    

    내 Node.js를 서버를 실행할 때이 희망이 그들의 버전을 다운 그레이드하지 않는 사람을 도움이, 내 오류를 해결했습니다.

    (당신이 어떤 이유로 당신의 DB 이름을 모르는 경우도, 단지을 console.log (데이터베이스를 할) 당신은 객체의 속성으로 볼 수 있습니다)

    EDIT (2018 월) :

    이에 따라, 콜백 실제로 데이터베이스에 연결된 클라이언트 대신 데이터베이스 자체를 반환합니다.

    따라서 데이터베이스 인스턴스를 얻기 위해, 우리는 DBNAME에 소요이 방법을 사용합니다. 문서에서이 연결 문자열에서 사용하는 데이터베이스 이름을 지정하지 않으면 말했다. 아래 코멘트에 @divillysausages 언급한다.

    . 즉, 우리는 database.db () 컬렉션 ( 'theCollectionIwantToAccess')를 호출해야합니다; DBNAME을이 데이터베이스는 클라이언트가 더 나은 이해를 위해 실제로 URL에 의해 제공되는 경우

  3. ==============================

    3.이 오류는 MongoDB의 라이브러리에 있습니다. MongoDB를 버전 2.2.33을 설치하려고합니다. 당신의 node_modules 디렉토리를 삭제하고 추가

    이 오류는 MongoDB의 라이브러리에 있습니다. MongoDB를 버전 2.2.33을 설치하려고합니다. 당신의 node_modules 디렉토리를 삭제하고 추가

    "dependencies": {
       "mongodb": "^2.2.33"
    }
    

    그때

    npm install
    

    당신은있다

  4. ==============================

    4.

    MongoClient.connect(uristring, function (err, database) {
          var db=database.db('chatroomApp');
          var collections=db.collection('chats');
    });
    

    필요 먼저 컬렉션에 액세스하기 전에 데이터베이스를 얻을 수 있습니다.

  5. ==============================

    5.몽고 문서에 따르면, 우리는 아래와 같이 연결을 변경해야합니다,

    몽고 문서에 따르면, 우리는 아래와 같이 연결을 변경해야합니다,

    The legacy operation
    MongoClient.connect('mongodb://localhost:27017/test', (err, db) => {
        // Database returned
    });
    
    is replaced with
    MongoClient.connect('mongodb://localhost:27017/test', (err, client) => {
        // Client returned
        var db = client.db('test');
    });
    

    몽고 버전을 다운 그레이드 할 필요가 없습니다 :)

  6. ==============================

    6.기존 MongoDB의 패키지를 제거하고 나를 위해 문제를 해결 다음 명령을 사용하여 다시 설치. :)

    기존 MongoDB의 패키지를 제거하고 나를 위해 문제를 해결 다음 명령을 사용하여 다시 설치. :)

    npm uninstall mongodb --save
    
    npm install mongodb@2.2.33 --save
    

    PS : @MihirBhende 및 @yaxartes 덕분에

    참고로,

    당신이 필드를 처음 사용하는 경우, https://github.com/mongodb/node-mongodb-native/releases에서 비 RC 릴리스를 선호합니다.

  7. ==============================

    7.저도 같은 문제로 실행했습니다. 비디오가 생성 된 이후 노드의 MongoDB를 드라이버 모듈이 업데이트 된 것 같습니다. 나는 작동하는 문서에 아래의 코드를 발견했다.

    저도 같은 문제로 실행했습니다. 비디오가 생성 된 이후 노드의 MongoDB를 드라이버 모듈이 업데이트 된 것 같습니다. 나는 작동하는 문서에 아래의 코드를 발견했다.

    var MongoClient = require('mongodb').MongoClient;
    
    var url = 'mongodb://localhost:27017/<dbName>';
    MongoClient.connect(url, (err, db) => {
       db.collection('<collection-name>').find({}).toArray(function(err, docs) {
    
        // Print the documents returned
        docs.forEach(function(doc) {
            console.log(doc);
        });
    
        // Close the DB
        db.close();
        });
    
    });  
    

    로 대체

     var MongoClient = require('mongodb').MongoClient;
    
      var url = 'mongodb://localhost:27017'; // remove the db name.
        MongoClient.connect(url, (err, client) => {
           var db = client.db(dbName);
           db.collection('<collection-name>').find({}).toArray(function(err, docs) {
    
            // Print the documents returned
            docs.forEach(function(doc) {
                console.log(doc);
            });
    
            // Close the DB
            client.close();
            });
    
        });  
    

    여기에 더 구문 문제로 우리가 실행하는 경우에는 최신 문서에 대한 링크입니다.

  8. ==============================

    8.

    module.exports = function(app, db) {
      app.post('/notes', (req, res) => {
      const note = { text: req.body.body, title: req.body.title };
      db.collection('notes').insert(note, (err, result) => {
    ...
    

    DB -> 클라이언트

    module.exports = function(app, client) {
      var db = client.db("name");
      app.post('/notes', (req, res) => {
      const note = { text: req.body.body, title: req.body.title };
      db.collection('notes').insert(note, (err, result) => {
    ...
    
  9. ==============================

    9.감사합니다 Dilum Darshana에 많은! 귀하의 조언이 많은 도움이되었습니다. 난 그냥, 추가 할, 당신이 이런 식으로 것입니다 외모 약속을 사용하는 경우 :

    감사합니다 Dilum Darshana에 많은! 귀하의 조언이 많은 도움이되었습니다. 난 그냥, 추가 할, 당신이 이런 식으로 것입니다 외모 약속을 사용하는 경우 :

    let db;
    MongoClient.connect('mongodb://localhost/collectionName').then(connection => {
        db = connection.db('collectionName');
        app.listen(3000, () => {
            console.log("App started on port 3000");
        }); 
    }).catch(error => {
        console.log('ERROR:', error);
    });
    
  10. ==============================

    10.코드 내 문제를 해결 아래 "^ 3.1.3"최근 버전 나는 "MongoDB를"을 사용했다

    코드 내 문제를 해결 아래 "^ 3.1.3"최근 버전 나는 "MongoDB를"을 사용했다

    server.js에서

    MongoCLient.connect(db.url,(err,client)=>{
        var db=client.db('notable123');
        if(err){
        return console.log(err);
        }
        require('./server-app/routes')(app,db);
        app.listen(port, ()=> {
            console.log("we are live on : "+ port);
        })
    
    })
    

    및 게시물 코드는 같다

    module.exports = function(app,db) {
        app.post('/notes',(req,res)=>{
            const note= {text: req.body.body,title:req.body.title};
            db.collection('notes').insertOne(note,(err,result)=>{
                if(err) {
                    res.send({"error":"Ann error has occured"}); 
                } else {
                    res.send(result.ops[0])
                }
            });
        });
    };
    
  11. ==============================

    11.당신의 package.json합니다.

    당신의 package.json합니다.

    반드시 다음 버전은 다음과 같이합니다

    "nodemon": "^1.12.1"
    "mongodb": "^2.2.33"
    

    위의 nodemon 및 MongoDB를 버전은 오류없이 함께 작동합니다. 그래서 당신의 package.json는 다음과 같이 보일 것입니다 :

        {
      "name": "myapi",
      "version": "1.0.0",
      "description": "Json Api",
      "main": "server.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "dev": "nodemon server.js"
      },
      "author": "Riley Manda",
      "license": "ISC",
      "dependencies": {
        "body-parser": "^1.18.2",
        "express": "^4.16.2",
        "mongodb": "^2.2.33"
      },
      "devDependencies": {
        "nodemon": "^1.12.1"
      }
    }
    

    망가 다운 그레이드 후 설치 NPM 실행하는 것을 잊지

  12. ==============================

    12.뿐만 아니라이 문제를했다, 내가하는 발표자가 함수로 컬렉션을 사용 된 자습서를 다음했다. 그것은 나를 위해 일하지 않았다. 내가 발견 한 것은 발표자가 버전 MongoDB를 NPM 모듈의 2.3.4을 사용했다이었다. 모듈은 현재 버전 3.x.x에 잘. 나는 mogodb NPM 모듈의 2.x.x 버전을 요청하는 package.json 파일을 변경하면, 갑자기 모든 일했다.

    뿐만 아니라이 문제를했다, 내가하는 발표자가 함수로 컬렉션을 사용 된 자습서를 다음했다. 그것은 나를 위해 일하지 않았다. 내가 발견 한 것은 발표자가 버전 MongoDB를 NPM 모듈의 2.3.4을 사용했다이었다. 모듈은 현재 버전 3.x.x에 잘. 나는 mogodb NPM 모듈의 2.x.x 버전을 요청하는 package.json 파일을 변경하면, 갑자기 모든 일했다.

    내가 무슨 일이 있었 믿었하면 모듈이 다른 개체로 컬렉션을 변경하는 변경 한 것이 었습니다. 새 버전을 사용할 수 있지만, 당신이 2.x.x 버전을 지정할 경우, 기존의 방법이 작동하는 방법을 알고하지 마십시오. "^ 2.2.31"작품 : 특히 나는 "MongoDB를"(내 package.json 파일, "종속성"섹션에서 오는) 사항을 확인 할 수 있습니다.

    가장 좋은 방법은:

    $> npm install mongodb@2.2.31 --save
    
  13. ==============================

    13.사용하여 코드를 사용 :

    사용하여 코드를 사용 :

    npm version 6.0.1,
    Node version 10.1.0
    "body-parser": "^1.18.3",
    "express": "^4.16.3",
    "mongodb": "^3.1.0-beta4"
    "nodemon": "^1.17.4"
    

    여기 server.js 코드는 다음과 같습니다

    const express       = require('express');
    const MongoClient   = require('mongodb').MongoClient;
    const bodyParser    = require('body-parser');
    const db            = require('./config/db');
    const app           = express();
    const port          = 8000;
    
    app.use(bodyParser.urlencoded({ extended:true }))
    MongoClient.connect(db.url, { useNewUrlParser: true },  (err, client)=>{
        var db = client.db('notable');
        if (err) return console.log(err)
    
        require('./app/routes')(app, client);
        app.listen(port,()=>{
            console.log('we are live at '+ port);
        });
    })
    

    다음은 설정 / db.js 코드는 다음과 같습니다

    module.exports = {
        url:"mongodb://127.0.0.1:27017"
    }
    

    여기에 경로 / note_routes.js입니다 :

     var ObjectId = require('mongodb').ObjectID;
     module.exports= function (app, client) {
            var db = client.db('notable');
            //find One
            app.get('/notes/:id', (req, res)=>{
                    const id =req.params.id;
                    const details ={'_id': new ObjectId(id)}
                    db.collection('notes').findOne(details, (err, item)=>{
                        if(err)
                        {
                            res.send({'error':"An error has occured"})
                        }
                        else
                        {
                            res.send(item)
                        }
                    });
                });
                //update rout
                app.put('/notes/:id', (req, res)=>{
                    const id =req.params.id;
                    const details ={'_id': new ObjectId(id)}
                    const note ={text: req.body.body, title: req.body.title};
                    db.collection('notes').update(details, note, (err, item)=>{
                        if(err)
                        {
                            res.send({'error':"An error has occured"})
                        }
                        else
                        {
                            res.send(item)
                        }
                    });
                });
    
                //delete route
                app.delete('/notes/:id', (req, res)=>{
                    const id =req.params.id;
                    const details ={'_id': new ObjectId(id)}
                    db.collection('notes').remove(details, (err, item)=>{
                        if(err)
                        {
                            res.send({'error':"An error has occured"})
                        }
                        else
                        {
                            res.send("Note "+id+"deleted!")
                        }
                    });
                });
                //insert route
                app.post('/notes', (req, res)=>{
                    const note ={text: req.body.body, title: req.body.title};
                    db.collection('notes').insert(note, (err, results)=>{
                        if(err)
                        {
                            res.send({'error':"An error has occured"})
                        }
                        else
                        {
                            res.send(results.ops[0])
                        }
                    });
    
                });
            };
    
  14. ==============================

    14.연결 URL에 데이터베이스 이름을 사용하지 마십시오 :

    연결 URL에 데이터베이스 이름을 사용하지 마십시오 :

    const mongo_url = 'mongodb://localhost:27017'
    

    대신 방법 아래 사용

    MongoClient.connect(mongo_url , { useNewUrlParser: true }, (err, client) => {
            if (err) return console.log(err)
            const  db =  client.db('student')
            const collection = db.collection('test_student');
            console.log(req.body);
            collection.insertOne(req.body,(err,result)=>{
                if(err){
                    res.json(err);
                }
                res.json(result);
            });
        });
    
  15. ==============================

    15.

    const MongoClient = require('mongodb').MongoClient;
    
    //connection url
    
     const url = 'mongodb://localhost:27017/myproject';
    
     MongoClient.connect(url,{useNewUrlParser: true},(err,client)=> {
      if(err) {
        return console.dir(err)
      }
    
       console.log('Connected to MongoDB')
    
      //get the collection
      let db = client.db('myproject');
      db.collection('users').insertOne({
      name: 'Hello World',
      email: 'helloworld@test.com'
    
      },(err,result)=> {
      if(err) {
          return console.dir(err)
      }
      console.log("Inserted Document");
      console.log(result);
    
         });
       });
    
  16. ==============================

    16.나는 간단한 해결책을했습니다 :

    나는 간단한 해결책을했습니다 :

    note_routes.js

    db.collection('notes').insert(note, (err, result) => {
    

    바꾸다

    db.db().collection('notes').insert(note, (err, result) => {
    
  17. from https://stackoverflow.com/questions/43779323/typeerror-db-collection-is-not-a-function by cc-by-sa and MIT license