простой запрос api узла не отображает никаких данных

76
3

Посмотрите, у меня есть запрос в файле server.js

var Post = require('./../models/post');
//GET ALL POSTS
app.get('/api/posts', function (req, res) {
Post.getPosts(function (err, posts) {
if(err) {
throw err;
}
res.json(posts);
});
});

и моя модель post.js выглядит так:

var mongoose = require('mongoose');

var postSchema = mongoose.Schema({
username: {
type: String,
required: true
},
body: {
type: String,
required: true
},
date: { type: Date,
default: Date.now
}
});

var Post = module.exports = mongoose.model('Post', postSchema);

// Get All Posts
module.exports.getPosts = function (callback, limit) {
Post.find(callback).limit(limit);
};

На мой взгляд, весь код написан правильно, но он не отображает данные, поэтому я дважды проверяю mongoDB, если у меня есть запись:

> show dbs
admin 0.000GB
bookstore 0.000GB
local 0.000GB
ownfb 0.000GB
> use ownfb
switched to db ownfb
> show collections
posts
> db.posts.find()
{ "_id" : ObjectId("597aa5b04c08c647b4efb58d"), "type" : "user", "body" : "POST_Z_MONGOOSE_YO" }

MongoDB выглядит хорошо и содержит одну запись, поэтому, когда я перехожу к URL http://localhost: 5000/api/posts

Он ничего не показывает, кроме пустого массива

[]

Также я не получаю никаких ошибок в cmd/browser.

Gist полный код этих двух файлов:

server.js: https://gist.github.com/anonymous/9b04527e97e889dcaa109f3ff459a5da

post.js: https://gist.github.com/anonymous/e77064ae71b5ef6d5a9abfd897187ddf

спросил(а) 2021-01-25T17:23:59+03:00 5 месяцев назад
1
Решение
63

Вы не передаете правильные параметры в свою функцию getPosts(). Он ожидает обратного вызова и ограничения... Уверен, что он использует 0 как предел, так как вы его не даете.

ИЛИ ЖЕ

Вы можете попробовать только один экспорт. postSchema.getPosts() - это то, где вы можете прикрепить метод, а затем просто экспортировать mongoose.model('Post', postSchema); и ничего больше.

ответил(а) 2021-01-25T17:23:59+03:00 5 месяцев назад
46

app.get('/api/posts', function (req, res) { Post.getPosts(function (err, posts) { res.json(posts); res.end();//!!!!! });//returns here with no results });

Обратите внимание на res.end() которая должна быть вызвана после res.json() для фактической передачи данных.

ответил(а) 2021-01-25T17:23:59+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема