数据文件
var mongoose = require('mongoose');
var DataSchema = mongoose.Schema({
name:{
type: String,
required: true
},
create_date:{
type: Date,
default: Date.now
}
});
var Data = module.exports = mongoose.model('Data', DataSchema);
//Get
module.exports.getData = function(callback, limit){
Data.find(callback).limit(limit);
}
应用
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
GrabData =require('./models/Data');
// Connect to mongoose
mongoose.connect('mongodb://localhost/StephensNode', { useMongoClient: true });
//Stored in localhost via install
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
console.log("connection Success");
});
exports.test = function(req,res) {
res.render('test');
};
app.get('/', function(req, res) {
res.send('Use API Please :)');
});
app.get('/Dir/Data', function(req, res) {
GrabData.getData(function(err, Data){
if(err){
throw err;
}
//Chuck a error
res.json(Data);
console.log(Data);
console.log(mongoose.connection.readyState);
//Sends data as json
});
});
app.listen(3000);
console.log('Running on port 3000');
我有一点问题,由于某些原因它没有返回JSON。 mongodb确实有数据。目前只有名称字段。我之前从未遇到过这个问题。数据库的控制台日志报告它已正常连接。我甚至甩了桌子,重新创造了没有任何成功。
答案 0 :(得分:1)
您有三个问题:定义getData
的方式,您调用find
的方式以及忘记提供限制值。
您应将getData
定义为static method。
find
将条件作为其第一个参数。如果您希望它匹配所有文档,只需使用空对象。第二个参数可以是回调函数,但limit
不会产生任何影响。
致电getData
时,您忘记提供limit
的值。此外,最好将回调函数作为最后一个参数。
以下是您的模型代码的样子:
var mongoose = require('mongoose');
var DataSchema = mongoose.Schema({
name:{
type: String,
required: true
},
create_date:{
type: Date,
default: Date.now
}
});
DataSchema.statics.getData = function(limit, callback) {
this.find({}).limit(limit).exec(callback);
}
module.exports = mongoose.model('Data', DataSchema);
这就是你应该如何调用这个函数:
GrabData.getData(10, function(err, Data){...});