Eu tenho uma API resful muito simples criada apenas para a prática. Mas quando tento usar o URL, por exemplo localhost: 3000 / people apenas exibe uma matriz vazia como esta []. Não há erro no console. Estou usando o pacote rest-node para criar a API. Aqui está o código que eu usei:
Server.js (isso é copiado da mesma para o mesmo do pacote reparador de nó (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"
}
}
e dentro do meu mongodb existem dados no db: nomeado mydbs Collection: people
> show dbs
local 0.000GB
**mydbs 0.000GB**
test 0.000GB
> show collections
people
> db.people.find()
{ "_id" : ObjectId("57343f28f41d55c64cca135b"), "name" : "jackal" }
Agora, quando inicio o servidor e vou http://localhost/people exibe uma matriz vazia []. Mas deve mostrar a entrada em Formato Json algo assim
{
_v: 0,
_id: 123344390dfsjkjsdf,
name: "jackal"
}
Por favor ajude!!! Por favor, me dê a direção certa. obrigado
Respostas:
2 para resposta № 1restful.model
retorna um modelo de Mongoose e, por sua vez, usa o nome do modelo pluralizado como um nome de coleção. Então, no seu caso, people
referências de modelo para peoples
coleção, que está vazia. Se você quiser usar o algoritmo de nomeação de mangusto corretamente, poderá usar person
como o nome do modelo. A coleção de mangustos referenciados será people
como você quer que seja.
Atualizar
Algoritmo de nomeação de mangusto
Como exemplo (o mangusto precisa ser instalado):
var utils = require("mongoose/lib/utils");
utils.toCollectionName("people"); // peoples
utils.toCollectionName("person"); // people
1 para resposta № 2
Ok, depois de uma pesquisa, descobri que o problema é comMangusto que retorna a forma pluralizada do nome da coleção "pessoas" como "povos" ou "pessoa" como "pessoas". Esse é o motivo por trás dos dados para não serem exibidos. Então eu apenas forcei a usar a coleção que eu quero assim:
var mongoose = require("mongoose");
var PersonSchema = new mongoose.Schema({
name: {
type: String
}
}, {collection: "person"});
var person = mongoose.model("person", PersonSchema);
module.exports = person;
Então, aqui eu adicionei a linha {collection: "person"} para forçar o uso dessa coleção no meu modelo. Agora posso obter o resultado conforme necessário da coleção exata que desejo.