Tak więc, gdy próbuję wyświetlić dane JSON w przeglądarce Itylko [] zamiast pełnych danych. Próbuję wyświetlić dane z mongodb za pomocą mangoose i express. Mam jedną kolekcję w bazie danych i jeden dokument, który próbuję wyświetlić, ale dostaję tylko []. Dlaczego? Oto kod: app.js:
const express = require("express");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
const Person = require("./Person.model");
const app = express();
mongoose.Promise = global.Promise;
const db = "mongodb://localhost/project";
mongoose.connect(db);
mongoose.connection.once("open", () => console.log("connection has been made...")).
on("error", (error) => console.log(error));
app.get("/", function(req, res) {
res.send("It is good to be here");
});
app.get("/persons", function(req, res) {
Person.find({}).exec(function(error, persons) {
if (error) {
res.send(error);
} else {
res.json(persons);
}
});
});
app.listen(3000, () => console.log("now listening to port 3000"));
i Person.model.js:
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const PersonSchema = new Schema({
name: String,
age: Number,
favcolor: String,
osobina: String
});
const Person = mongoose.model("person", PersonSchema);
module.exports = Person;
Odpowiedzi:
0 dla odpowiedzi № 1Ponieważ używasz Promise z Mongoose, możesz spróbować zmienić kod zamiast używać funkcji wywołania zwrotnego w ten sposób
app.get("/persons", function(req, res) {
Person.find({}).exec().then(function(persons) {
res.json(person);
}).catch(function(error) {
res.send(error); //Will lead to a 200 with the error message inside
});
});
Edytować
Nie powinieneś używać new
podczas definiowania modelu. Usunąłem trochę zbędnego kodu z twojego modelu, to działa:
const mongoose = require("mongoose");
const PersonSchema = mongoose.Schema({
name: String,
age: Number,
favcolor: String,
osobina: String
});
module.exports = mongoose.model("person", PersonSchema);