无法从节点jsbuild立mongodb连接

我做了这个节点的JS应用程序,然后我试图与邮递员,但每次我提出了涉及MongoDB的请求,它不断加载。 模型的函数find是代码停止的地方,callback从不被调用。

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服务器是通过控制台启动的,但我不知道如何检查。

谢谢!

编辑:

我让代码更容易testing和解决问题。 现在的代码是这样的,我没有得到连接到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程序,都会发生这种情况。 谢谢

我认为问题在于你正在给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了错误。

当您使用.find函数时,您需要传递2个参数。 在你的情况下,因为你没有传递callback作为第二个参数,它永远不会被调用。

User.find({}, callback)应该这样做。

我发现了这个问题。

mongoose的版本比连接到我的mongodb版本所需的版本要旧。 只需通过NPM更新,好走了。