2016-08-01 51 views
2

製作一個投票應用程序,該應用程序由以下兩個模型用戶和投票以及由兩個集合用戶和民意調查組成的數據庫組成。顯示'db.get不是函數'NodeJs,MongoDB

user.js的

'use strict'; 

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var User = new Schema({ 
    github: { 
     id: String, 
     displayName: String, 
     username: String, 
     publicRepos: Number 
    }, 
    nbrClicks: { 
     clicks: Number 
    } 
}); 
module.exports = mongoose.model('User', User); 

Poll.js

'use strict'; 

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var Poll = new mongoose.Schema({ 
    title: { type: String, required: true }, 
    creator: String, 
    choices: [String], 
    votes: [Number] 
}); 
module.exports = mongoose.model('Poll', Poll); 

,這是路由部分

'use strict'; 
require('dotenv').load(); 
var path = process.cwd(); 
var ClickHandler = require(path + '/app/controllers/clickHandler.server.js'); 
var mongo = require('mongodb'); 
var mongoose = require('mongoose'); 
var db = mongoose.createConnection(process.env.MONGO_URI); 

module.exports = function (app, passport) { 
    function isLoggedIn (req, res, next) { 
     if (req.isAuthenticated()) { 
      return next(); 
     } else { 
      res.redirect('/login'); 
     } 
    } 

    var clickHandler = new ClickHandler(); 
    app.route('/').get(isLoggedIn, function (req, res) { 
     //console.log(display-name.profile-value); 
     res.render(path + '/public/index.jade'); 
    }); 
    app.route('/polls').get(function(req, res) { 
     var polls = db.get('polls'); 
     console.log(polls); 
     res.render(path + '/public/polls.jade'); 
    }) 

這是錯誤被拋出

TypeError: db.get is not a function 
at /home/ubuntu/workspace/app/routes/index.js:39:22 
at Layer.handle [as handle_request] (/home/ubuntu/workspace/node_modules/express/lib/router/layer.js:95:5) 
at next (/home/ubuntu/workspace/node_modules/express/lib/router/route.js:131:13) 
at Route.dispatch (/home/ubuntu/workspace/node_modules/express/lib/router/route.js:112:3) 
at Layer.handle [as handle_request] (/home/ubuntu/workspace/node_modules/express/lib/router/layer.js:95:5) 
at /home/ubuntu/workspace/node_modules/express/lib/router/index.js:277:22 
at Function.process_params (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:330:12) 
at next (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:271:10) 
at SessionStrategy.strategy.pass (/home/ubuntu/workspace/node_modules/passport/lib/middleware/authenticate.js:325:9) 
at SessionStrategy.authenticate (/home/ubuntu/workspace/node_modules/passport/lib/strategies/session.js:71:10) 
at attempt (/home/ubuntu/workspace/node_modules/passport/lib/middleware/authenticate.js:348:16) 
at authenticate (/home/ubuntu/workspace/node_modules/passport/lib/middleware/authenticate.js:349:7) 
at Layer.handle [as handle_request] (/home/ubuntu/workspace/node_modules/express/lib/router/layer.js:95:5) 
at trim_prefix (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:312:13) 
at /home/ubuntu/workspace/node_modules/express/lib/router/index.js:280:7 
at Function.process_params (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:330:12) 
at next (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:271:10) 
at initialize (/home/ubuntu/workspace/node_modules/passport/lib/middleware/initialize.js:53:5) 
at Layer.handle [as handle_request] (/home/ubuntu/workspace/node_modules/express/lib/router/layer.js:95:5) 
at trim_prefix (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:312:13) 
at /home/ubuntu/workspace/node_modules/express/lib/router/index.js:280:7 
at Function.process_params (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:330:12) 
+0

我會猜測問題是'db.get'不是一個函數。你會想用'Poll.find' [芒ose的文檔](http://mongoosejs.com/docs/) – numbers1311407

回答

2

首先,您需要將Poll導入路由文件。

var Poll = require('./PATH_TO_POLL/Poll'); 

然後爲@ numbers1311407形容,如果你想返回所有已保存的文件投票嘗試:

Poll.find(function (err, polls) { 
    if (err) return console.error(err); 
    console.log(polls); 
}) 

編輯:

上module.exports的更多信息,可以發現here

+0

做些什麼感謝,現在它的工作是 –

+0

但實際上我已經使用模塊導出了輪詢模型.exports,所以不能在目錄中的其他地方簡單地使用require方法。 –

+0

歡迎您,很高興爲您提供幫助。你必須要求''Poll',你在這裏調用它'module.exports = mongoose.model('Poll',Poll);'按慣例表明你應該用相同的名稱來調用它,但你可以稱它爲任何東西。堅持命名約定,它使你的代碼更易於閱讀。 – alexi2