2016-12-04 3 views
0

오류를 가져 오는 노드를 처음 사용했습니다. 내가 mongodb 데이터베이스의 컬렉션에 삽입 싶어요. 적절한 솔루션을 제공하거나 이에 대해 안내해주십시오.nodejs : TypeError : mongo.collection이 함수가 아닙니다.

TypeError : mongo.collection은 함수가 아닙니다. 서버에 (events.js : 106 : 13)
(events.js : 191 : 00)에서 emitTwo (events.js : 106 : 13)에
(D : \ taha \ MultiChannelChatApp-master \ MultiChannelChatApp 마스터 \ routes \ RegUser.js : 7)에서 HTTPParser.parserOnIncoming
[onIncoming 등 (_http_server.js : 546 : 12) HTTPParser.parserOnHeadersComplete (_http_common.js에서
: 99 : 23)

var http = require('http'), 
fs = require('fs'), 
url = require('url'); 


// var db = require('../db'); 


var mongo = require('../db_mongo'); 


http.createServer(function(request, response){ 
var path = url.parse(request.url).pathname; 
var url_parts = url.parse(request.url, true); 
var query = url_parts.query; 
    var url_parts = url.parse(request.url, true); 
    var query = url_parts.query; 

var setval = {username: query.name, email: query.email, password: query.pass}; 
//  db.query('INSERT INTO users SET ?', setval, function (err, res) { 
//   if (err) 
//    throw err; 
// 
// }); 


if (mongo) {console.log("mongo connected here ss");} 

var userCollection = mongo.collection('users'); 

userCollection.insert((setval, function(err, result) { 
    if(err) { throw err; } 
    res.write("<p>Product inserted:</p>"); 
    res.end("<p>" + result[0].make + " " + result[0].model + "</p>"); 
})); 


    // db.collection('users').insertOne({ 
    //  username: query.name, email: query.email, password: query.pass 
    // }, function(err, result) { 
    //  assert.equal(err, null); 
    //  console.log("Inserted a document into users"); 
    //  callback(); 
    // }); 
// }; 

// insertDocument(db, function() { 
// }); 




}).listen(8001); 

db_mongo
var mongodb = require('mongodb'); 
var MongoClient = mongodb.MongoClient; 
var url_db = 'mongodb://localhost:27017/test'; 

exports.connectdb = function (callback) { 

module.exports = MongoClient.connect(url_db, function (err, db) { 
    if (err) { 
     console.log('Unable to connect to the mongoDB server. Error:', err); 
    } 
    if (!err) { 
     console.log('Connection established to', url_db); 
     return db; 
    } 
}); 
} 
module.exports = exports; 
+0

이 라인은 문제를 일으키는);'. '../db_mongo'' 파일 안에 무엇이 있습니까? – Thomas

+0

새 버전 확인 – SDA

답변

1

여기이 줄 아마 당신에게 문제를 일으키는 :

module.exports = exports;

그것을 제거하고 그것은 당신의 오류를 수정해야합니다.

일반적으로 인라인으로 지정하지 않으면 module.exports 또는 exports 중 하나만 할당 할 수 있지만 둘 다 지정할 수는 없습니다.

exports은 전체 모듈을 정의한 함수 또는 개체로 만들려면 이름이 지정된 함수를 내보내려면 module.exports입니다.

module.exports = exports = function(){ /* whatever */ } 

을하지만 더 이상 훨씬 덜 흔한 일 :

때로는 (특히 오래된 모듈에서) 사람들은 모두 같은를 덮어 쓸 것입니다.

또한 파일 전체가 내 보낸 함수의 내부에 어떤 이유로 든 포함됩니다. 당신이하고있는 주 : ...

exports.connectdb = 함수 (콜백) {/ * 물건 * /}

내부/물건/다시 전화하는거야 module.exports

만약 당신이 다음과 같이하면 :

console.log(require('../db_mongo')); 호출 코드에서, 당신은 아마 그것이 가져 오는 모든 객체가 exports 객체에 연결된 connectdb 함수라는 것을 알 것입니다.

또한 첫 번째 코드 블록에있는 호출 코드에서 비동기 스타일의 노드를 이해하는 것은 확실하지 않습니다.

db_mongo.js가 연결 문자열을 잘 넣을 수 있도록 드라이버의 연결을 래핑하려고 시도하지만 나중에 그 문자열을 비동기 함수로 처리해야합니다.

db_mongo는 다음과 같이 볼 수 있습니다 :

var mongodb = require('mongodb'); 
var MongoClient = mongodb.MongoClient; 
var url_db = 'mongodb://localhost:27017/test'; 

module.exports = function(callback) { 
    MongoClient.connect(url_db, callback); 
}); 

을 그리고 호출 코드는 다음과 같습니다`var에 userCollection = mongo.collection ('사용자 :

var http = require('http'), 
fs = require('fs'), 
url = require('url'); 

var mongo = require('../db_mongo'); 


http.createServer(function(request, response){ 
    var path = url.parse(request.url).pathname; 
    var url_parts = url.parse(request.url, true); 
    var query = url_parts.query; 
    var url_parts = url.parse(request.url, true); 
    var query = url_parts.query; 

    var setval = {username: query.name, email: query.email, password: query.pass}; 

    // The ../db_mongo.js file is now exporting a function that takes a callback; usage of the database has to happen inside that callback 
    mongo(function(err, db){ 
     var userCollection = db.collection('users'); 

     userCollection.insert(setval, function(err, result) { 
      if(err) { res.send(err); } 
      res.write("<p>Product inserted:</p>"); 
      res.end("<p>" + result[0].make + " " + result[0].model + "</p>"); 
     }); 
    }); 


}).listen(8001); 
+0

다시 오류 : TypeError : mongo.collection이 (가) 함수가 아닙니다. – SDA

+0

죄송합니다. 이전에 모바일에 있었기 때문에 파일이 얼마나 엉망 이었는지 깨달았습니다. 1 초, 나는 편집 할 것이다. – Paul

+0

심지어 mongo 객체가 null이 아닙니다. mongo.collection이 함수가 아닌 것으로 나타납니다. – SDA

관련 문제