2015-05-29 66 views
2

我一直編譯我的Node.js應用程序時,在第13行收到此錯誤:類型錯誤時試圖運行Node.js應用程式

var db = mc.db('course'); 
      ^
TypeError: undefined is not a function 
    at Object.<anonymous> (/app.js:13:13) 
    at Module._compile (module.js:460:26) 
    at Object.Module._extensions..js (module.js:478:10) 
    at Module.load (module.js:355:32) 
    at Function.Module._load (module.js:310:12) 
    at Function.Module.runMain (module.js:501:10) 
    at startup (node.js:129:16) 
    at node.js:814:3 

下面是代碼:

var express = require ('express'), 
    app = express(), 
    cons = require('consolidate'), 
    MongoClient = require('mongodb').MongoClient; 
    Server = require('mongodb').Server; 
app.engine('html',cons.swig); 
app.set('view engine','html'); 
app.set('views', __dirname + "/views"); 
var mc = new MongoClient(new Server('localhost',27017,{'native_parser' : true })); 
var db = mc.db('course'); 
app.get('/',function(req,res){ 
    dbs.collection('listCourse').findOne({}, function (err, doc){ 
     res.render('hello',doc); 
    }); 
}); 
app.get('*',function(req,res){ 
    res.send('Page not found',404); 
}); 
mc.open(function(err,mc){ 

    if(err) throw err; 

    app.listen(8080); 
    console.log('expres server started on port 8080'); 
}); 

你們可以告訴我我哪裏出了問題?

回答

1

添加此聲明var mc後:

console.log(mc); 

你會看到它返回一個connect對象其中包含一個Db()函數。

所以,你可以嘗試改變你的代碼:

var db = mc.connect.Db('course'); 

的MongoClient文檔(https://mongodb.github.io/node-mongodb-native/api-generated/mongoclient.html)顯示連接驗證碼:

var Db = require('mongodb').Db, 
    MongoClient = require('mongodb').MongoClient, 
    Server = require('mongodb').Server, 
    ReplSetServers = require('mongodb').ReplSetServers, 
    ObjectID = require('mongodb').ObjectID, 
    Binary = require('mongodb').Binary, 
    GridStore = require('mongodb').GridStore, 
    Grid = require('mongodb').Grid, 
    Code = require('mongodb').Code, 
    BSON = require('mongodb').pure().BSON, 
    assert = require('assert'); 

    // Connect using the connection string 
    MongoClient.connect("mongodb://localhost:27017/integration_tests", {native_parser:true}, function(err, db) { 
    assert.equal(null, err); 

    db.collection('mongoclient_test').update({a:1}, {b:1}, {upsert:true}, function(err, result) { 
     assert.equal(null, err); 
     assert.equal(1, result); 

     db.close(); 
    }); 
    }); 

所以,你能適應這個你碼。例如:

var express = require ('express'), 
     app = express(), 
     cons = require('consolidate'), 
     MongoClient = require('mongodb').MongoClient; 
     Server = require('mongodb').Server; 
    app.engine('html',cons.swig); 
    app.set('view engine','html'); 
    app.set('views', __dirname + "/views"); 

    MongoClient.connect("mongodb://localhost:27017/course", {native_parser:true}, function(err, db) { 
    if(err) throw err; 

    app.get('/',function(req,res){ 
     db.collection('listCourse').findOne({}, function (err, doc){ 
      res.render('hello',doc); 
     }); 
    }); 
    app.get('*',function(req,res){ 
     res.send('Page not found',404); 
    }); 

     db.close(); 
    }); 

     app.listen(8080); 
     console.log('expres server started on port 8080'); 
+0

哎@mark,感謝它的工作。我知道它是如何工作的,並發現我的錯誤:) – kodokbuncit

0

MongoClient實例沒有'db'方法。

推薦您連接喲分貝財產以後這樣的:

var mongojs = require("mongojs"); 
var collections = ['users', 'comments', 'books']; 
var db = mongojs("MyDBname", collections); 

db.users.find({_id: "abc1234567547abc1c3c35"}, function(err, users){ 
    // do something 
}) 

好運

相關問題