2017-12-22 6 views
0

・データファイルNodejsは、私はそれがJSONを戻っていない何らかの理由で、問題のビットを持っています[]の代わりにJSON

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); 

} 

のApp

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'); 

を返します。 mongodbにはデータが入っています。現在のところ、名前フィールドしかありません。私は前にこの問題に遭遇したことはありません。データベースのコンソールログに、正常に接続されていると報告されました。私はテーブルを投げ捨て、何の成功もなく再現しました。

+2

あなたのタイトルと言い、「[]を返す代わりにJSON」を"[]"は空の配列のJSONになります。実際に返されるのは何ですか? – ryachza

+0

ページは、テーブル内のデータの代わりに空の配列にすぎません。それでも、少なくとも日付を返すべきではありませんか? –

+0

'find'の最初の引数は条件でなければならず、コールバック関数でなければなりません。 – Josh

答えて

1

あなたはgetDataを定義する方法と、findという方法で制限値を提供することを忘れています。

  1. あなたはstatic methodとしてgetDataを定義する必要があります。

  2. findは、最初の引数として条件をとります。すべての文書に一致させるには、空のオブジェクトを使用します。 2番目の引数はコールバック関数ですが、limitは効果がありません。

  3. 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){...}); 
関連する問題