无法从节点js建立mongodb连接

时间:2016-12-15 00:33:15

标签: javascript node.js mongodb

我制作了这个节点js应用程序,然后我尝试使用邮递员,但每次我发出涉及mongodb的请求时,它都会继续加载。模型的函数find是代码停止的地方,永远不会调用回调。

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程序时都会发生这种情况。 感谢

2 个答案:

答案 0 :(得分: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)应该这样做。

答案 1 :(得分:0)

我发现了问题。

mongoose的版本比连接到我的mongodb版本所需的版本要早。只需通过npm更新即可。