Javascript 为什么mongodb find()从未访问我的回调

Javascript 为什么mongodb find()从未访问我的回调,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我正在尝试使用mongodb(使用mogoose)和node.js(使用restify)构建类似rest的API。 我是mongo世界的新手,我不知道问题出在哪里。这是db连接的问题还是其他问题 所以,我是这样做的: rest server.js //start server var restify = require('restify'); var server = restify.createServer(); server.use(restify.bodyParser()); //con

我正在尝试使用mongodb(使用mogoose)和node.js(使用restify)构建类似rest的API。 我是mongo世界的新手,我不知道问题出在哪里。这是db连接的问题还是其他问题

所以,我是这样做的: rest server.js

//start server
var restify = require('restify');
var server = restify.createServer();
server.use(restify.bodyParser());

//connect db
var config = require('./Config.js');
var mongoose = require('mongoose'),   
db = mongoose.createConnection('localhost', 'travelers'),
Schema = mongoose.Schema,
ObjectId = mongoose.SchemaTypes.ObjectId;

db.on('error', console.error.bind(console, 'DB connection error:'));
db.once('open', function callback() {
    console.log('db connection open');
});

var LoginModel = require('./models/LoginModel.js').make(Schema, mongoose);
var LoginResource = require('./resource/LoginResource.js')(server, LoginModel);
function make(Schema, mongoose) {
    var LoginSchema = new Schema({
        //id: (?)
        username: String,
        password: String,
        traveler_id: Number,
        contact_id: Number,
        last_login: Date,
        token: String
});
    return mongoose.model('Login', LoginSchema);
}

module.exports.make = make;
exports = module.exports = function (server, LoginModel) {
    var LoginRepository = require('../repository/LoginRepository.js');

    server.get('/login/:username/:password', function (req, res, next) {    
        LoginRepository.getLogin(req, res, next, LoginModel);
    });
}
function getLogin(req, res, next, LoginModel) {
    var query = LoginModel.find({ username: req.params.username, password: req.params.password});

    query.exec(function (err, docs) {
        console.log('got it!');
        res.send(docs);
    });
}
LoginModel.js

//start server
var restify = require('restify');
var server = restify.createServer();
server.use(restify.bodyParser());

//connect db
var config = require('./Config.js');
var mongoose = require('mongoose'),   
db = mongoose.createConnection('localhost', 'travelers'),
Schema = mongoose.Schema,
ObjectId = mongoose.SchemaTypes.ObjectId;

db.on('error', console.error.bind(console, 'DB connection error:'));
db.once('open', function callback() {
    console.log('db connection open');
});

var LoginModel = require('./models/LoginModel.js').make(Schema, mongoose);
var LoginResource = require('./resource/LoginResource.js')(server, LoginModel);
function make(Schema, mongoose) {
    var LoginSchema = new Schema({
        //id: (?)
        username: String,
        password: String,
        traveler_id: Number,
        contact_id: Number,
        last_login: Date,
        token: String
});
    return mongoose.model('Login', LoginSchema);
}

module.exports.make = make;
exports = module.exports = function (server, LoginModel) {
    var LoginRepository = require('../repository/LoginRepository.js');

    server.get('/login/:username/:password', function (req, res, next) {    
        LoginRepository.getLogin(req, res, next, LoginModel);
    });
}
function getLogin(req, res, next, LoginModel) {
    var query = LoginModel.find({ username: req.params.username, password: req.params.password});

    query.exec(function (err, docs) {
        console.log('got it!');
        res.send(docs);
    });
}
LoginResource.js

//start server
var restify = require('restify');
var server = restify.createServer();
server.use(restify.bodyParser());

//connect db
var config = require('./Config.js');
var mongoose = require('mongoose'),   
db = mongoose.createConnection('localhost', 'travelers'),
Schema = mongoose.Schema,
ObjectId = mongoose.SchemaTypes.ObjectId;

db.on('error', console.error.bind(console, 'DB connection error:'));
db.once('open', function callback() {
    console.log('db connection open');
});

var LoginModel = require('./models/LoginModel.js').make(Schema, mongoose);
var LoginResource = require('./resource/LoginResource.js')(server, LoginModel);
function make(Schema, mongoose) {
    var LoginSchema = new Schema({
        //id: (?)
        username: String,
        password: String,
        traveler_id: Number,
        contact_id: Number,
        last_login: Date,
        token: String
});
    return mongoose.model('Login', LoginSchema);
}

module.exports.make = make;
exports = module.exports = function (server, LoginModel) {
    var LoginRepository = require('../repository/LoginRepository.js');

    server.get('/login/:username/:password', function (req, res, next) {    
        LoginRepository.getLogin(req, res, next, LoginModel);
    });
}
function getLogin(req, res, next, LoginModel) {
    var query = LoginModel.find({ username: req.params.username, password: req.params.password});

    query.exec(function (err, docs) {
        console.log('got it!');
        res.send(docs);
    });
}
LoginRepository.js

//start server
var restify = require('restify');
var server = restify.createServer();
server.use(restify.bodyParser());

//connect db
var config = require('./Config.js');
var mongoose = require('mongoose'),   
db = mongoose.createConnection('localhost', 'travelers'),
Schema = mongoose.Schema,
ObjectId = mongoose.SchemaTypes.ObjectId;

db.on('error', console.error.bind(console, 'DB connection error:'));
db.once('open', function callback() {
    console.log('db connection open');
});

var LoginModel = require('./models/LoginModel.js').make(Schema, mongoose);
var LoginResource = require('./resource/LoginResource.js')(server, LoginModel);
function make(Schema, mongoose) {
    var LoginSchema = new Schema({
        //id: (?)
        username: String,
        password: String,
        traveler_id: Number,
        contact_id: Number,
        last_login: Date,
        token: String
});
    return mongoose.model('Login', LoginSchema);
}

module.exports.make = make;
exports = module.exports = function (server, LoginModel) {
    var LoginRepository = require('../repository/LoginRepository.js');

    server.get('/login/:username/:password', function (req, res, next) {    
        LoginRepository.getLogin(req, res, next, LoginModel);
    });
}
function getLogin(req, res, next, LoginModel) {
    var query = LoginModel.find({ username: req.params.username, password: req.params.password});

    query.exec(function (err, docs) {
        console.log('got it!');
        res.send(docs);
    });
}
测试查询 curl localhost:8080/login/qqq/www

所以我从来没有去过
res.send(docs)
事实上,我没有向数据库添加任何内容。我只是想知道查询没有找到任何东西

更新: 我不明白为什么,但是如果我像这样更改db连接代码,这个问题可以解决:

//connect db
var config = require('./Config.js');
var mongoose = require('mongoose/');
db = mongoose.connect(config.creds.mongoose_auth),
Schema = mongoose.Schema;
(使用mongoose.connect并将dbSchema变量定义为全局变量)

但在本例中,db.on()db.once()抛出异常“无此类方法”

换句话说,问题是,嗯。。。解决了,但我仍然不知道为什么。
这看起来像是一个有用的链接:

通过调用
mongoose.model()
创建的模型在执行查询时使用mongoose的默认连接池。默认连接池是通过调用
mongoose.connect()
创建的,您使用创建的模型进行的任何查询都将排队,直到您调用它并完成为止


您还可以像最初那样通过调用
db=mongoose.createConnection()
来创建单独的连接池(它们可以有自己的模型!),但是您必须使用
db.model()为其创建模型
这就是事情最初不适合您的原因。

我也是这样启动mongo的:mongod-dbPath../data/db谢谢,这让我能够解决我遇到的问题!