Nodejs返回[]而不是Json

时间:2017-12-22 13:09:23

标签: json node.js mongodb

数据文件

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确实有数据。目前只有名称字段。我之前从未遇到过这个问题。数据库的控制台日志报告它已正常连接。我甚至甩了桌子,重新创造了没有任何成功。

1 个答案:

答案 0 :(得分:1)

您有三个问题:定义getData的方式,您调用find的方式以及忘记提供限制值。

  1. 您应将getData定义为static method

  2. find将条件作为其第一个参数。如果您希望它匹配所有文档,只需使用空对象。第二个参数可以是回调函数,但limit不会产生任何影响。

  3. 致电getData时,您忘记提供limit的值。此外,最好将回调函数作为最后一个参数。

  4. 以下是您的模型代码的样子:

    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){...});