2016-12-15 59 views
1

我做了這個節點的js應用程序,然後我試圖與郵遞員,但每次我提出了涉及mongodb的請求,它不斷加載。模型的函數find是代碼停止的地方,回調從不被調用。無法建立從節點js的mongodb連接

app.js

var express = require("express"), 
app = express(), 
bodyParser = require('body-parser'), 
methodOverride = require('method-override'), 
mongoose = require('mongoose'); 

//Connection to DB 
mongoose.connect('mongodb://localhost:27017/users', function(err, res) { 
    if(err) { 
    console.log('ERROR: connecting to Database. ' + err); 
    } 
}); 

app.use(bodyParser.urlencoded({ extended: false })); 
app.use(bodyParser.json()); 
app.use(methodOverride()); 

var models = require('./models/user')(app, mongoose); 
var userContoller = require('./controllers/user'); 

var router = express.Router(); 

router.get('/', function(req, res) { 
    console.log('GET'); 
    res.send("Hello World!"); 
}); 

app.use(router); 

var users = express.Router(); 

users.route('/users') 
    .get(userContoller.findAllUsers); 

app.use('/api', users); 

app.listen(3000, function() { 
    console.log("Node server running on http://localhost:3000"); 
}); 

型號/ user.js的

exports = module.exports = function(app, mongoose){ 

var userSchema = new mongoose.Schema({ 
    userName: { type: String }, 
    password:  { type: Number } 
}); 

mongoose.model('User', userSchema); 

}; 

控制器/ user.js的

var mongoose = require('mongoose'); 
var User = mongoose.model('User'); 

//GET - Return all tvshows in the DB 
exports.findAllUsers = function(req, res) { 
    console.log('llega'); 
    User.find(function(err, users) { 
    if(err) res.send(500, err.message); 

    console.log('GET /users') 
     res.status(200).jsonp(users); 
    }); 
}; 

MongoDB服務器通過控制檯啓動,但我不不知道如何檢查它。

謝謝!

編輯:

我讓代碼更容易測試和解決問題。 現在的代碼是這樣的,我沒有得到與mongodb的連接。

var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost/test'); 

var db = mongoose.connection; 
db.on('error', function() { 
    console.log('error'); 
}); 
db.once('open', function() { 
    console.log('connected'); 
}); 

我沒有得到在控制檯中的錯誤或連接。

在mongod控制檯中,我收到一些消息,指出新建了一個連接。每次我打開nodejs程序時都會發生這種情況。 謝謝

+0

爲什麼jsonp?你的意思是json嗎? –

+0

是快捷函數返回json – Fausto

+0

您可以打開終端並鍵入'mongo'來檢查mongo是否正常工作。 – Finn

回答

1

我認爲問題是,你正在給mongoose.connect函數回電。在我來說,我做的:

mongoose.connect(url, options) 
const db = mongoose.connection 

db.on('error', function() { console.log('Cannot Connect to DB') }) 
db.once('open', function() { console.log('Mongoose Connected to DB') }) 

而且代替:

users.route('/users').get(userContoller.findAllUsers);

你可以試試:

users.get('/users', userController.findAllUsers);

我意識到你沒有傳遞next你的控制器的參數,如果你不通過,通常表示抱怨。

編輯:我想我找到了錯誤。

當您使用.find函數時,您需要傳遞2個參數。在你的情況下,因爲你沒有通過回調作爲第二個參數,它永遠不會被調用。

User.find({}, callback)應該這樣做。

+0

我試過,但同樣發生:( – Fausto

+0

我更新了答案,也許你應該檢查它。乾杯! –

+0

我編輯了這個問題,問題似乎在貓鼬上 – Fausto

0

我發現了這個問題。

貓鼬的版本比連接到我的mongodb版本所需的版本要舊。只需通過npm更新它,然後再行。