2016-05-12 9 views
2

私は非常にシンプルで居心地の良いAPIを練習用に作成しました。しかし、私がURLを使用しようとすると、例えば。 localhost:3000/peopleこのような空の配列を表示するのは[]です。コンソールにエラーはありません。私はapiを作成するためにnode-restfulパッケージを使用しています。mongodbからのデータが表示されない快適なapi

Server.js(これはノード安らかパッケージ(https://github.com/baugarten/node-restful

var express = require('express'), 
    bodyParser = require('body-parser'), 
    methodOverride = require('method-override'), 
    morgan = require('morgan'), 
    restful = require('node-restful'), 
    mongoose = restful.mongoose; 
var app = express(); 

app.use(morgan('dev')); 
app.use(bodyParser.urlencoded({'extended':'true'})); 
app.use(bodyParser.json()); 
app.use(bodyParser.json({type:'application/vnd.api+json'})); 
app.use(methodOverride()); 

mongoose.connect("mongodb://localhost/mydbs"); 

var people = app.people = restful.model('people', mongoose.Schema({ 
    name: String 
    })) 
    .methods(['get', 'post', 'put', 'delete']); 

people.register(app, '/people'); 

app.listen(3000); 
console.log("working"); 

package.json

{ 
    "name": "app1", 
    "version": "1.0.0", 
    "description": "", 
    "main": "server.js", 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1" 
    }, 
    "author": "", 
    "license": "ISC", 
    "dependencies": { 
    "body-parser": "^1.15.1", 
    "express": "^4.13.4", 
    "lodash": "^4.12.0", 
    "method-override": "^2.3.5", 
    "mongoose": "^4.4.16", 
    "morgan": "^1.7.0", 
    "node-restful": "^0.2.5", 
    "resourcejs": "^1.2.0" 
    } 
} 

から、私のMongoDBの内部同じに同じコピーされる:ここで私が使用されるコードでありますデータベースにデータがあります:mydbsという名前のコレクションです。人々:

> show dbs 
local 0.000GB 
**mydbs 0.000GB** 
test 0.000GB 

> show collections 
people 

> db.people.find() 
{ "_id" : ObjectId("57343f28f41d55c64cca135b"), "name" : "jackal" } 

私はサーバとgotoを起動するとhttp://localhost/people空のArray []を表示します。しかし、それは何か、これは

{ 
    _v: 0, 
_id: 123344390dfsjkjsdf, 
name: 'jackal' 
} 

助けてくださいようJSON形式でエントリが表示されるはずです!私に正しい方向を教えてください。ありがとう

+0

誰でもこの問題に答えるか、ヒントを与えることができますか? – Sam

答えて

1

オクラホマコレクション名 'people'を 'people'や 'person'として 'people'として表示します。データの背後にある理由は表示されません。私のモデルに使用して、このコレクションを強制的に:私はライン{ '人のコレクションを}追加したので、ここで

var mongoose = require('mongoose'); 

var PersonSchema = new mongoose.Schema({ 
    name: { 
     type: String 
    } 
}, {collection: 'person'}); 

var person = mongoose.model('person', PersonSchema); 
module.exports = person; 

:だから私はちょうどそれは私がこのようにしたいコレクションを使用して強制的に。今私が望む正確なコレクションから必要なときに結果を得ることができます。

2

restful.modelはMongooseモデルを返し、コレクション名として複数形のモデル名を使用します。あなたの場合、peoplepeoplesコレクションへのモデル参照は空です。 mongoose命名アルゴリズムを適切に使用する場合は、personをモデル名として使用できます。参照されたマングースコレクションは、あなたが望むようにpeopleになります。

更新例として

Mongoose naming algorithm

(マングースがインストールされなければならない):

私は問題を発見した研究は、複数形のフォームを返しマングースとなった後
var utils = require('mongoose/lib/utils'); 
utils.toCollectionName('people'); // peoples 
utils.toCollectionName('person'); // people 
+0

私は初期の返信のためにあなたのポイントをありがとう..しかし、私は命名アルゴリズムを理解することができません.. Mongodで私はモデル名と人としてコレクションを使用することができますコードを私に例を与えてください複数の名前を付ける必要があります。事前に感謝..人々にコレクションの名前を変更することはそれを作ったけれども! – Sam

+0

投稿を更新して、「人物」モデルが「人」コレクションにどのように、そして「人物」が「人物コレクション」に行くかの例を示します。それが役に立てば幸い。 –

関連する問題