无法从节点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更新,好走了。