На сайте просмотра моей книги в опции поиска пользователь может искать книги либо по имени author
, либо по genre
.Для тех у меня есть отдельные функции в search.service.ts
ниже.В бэкэнде тоже есть отдельные контроллеры.Но во время поиска он выполняет только первый контроллер, но не выполняет второй контроллер, даже если маршрут направлен к нему.
Здесь search.service.ts
функции,
getPostsByAuthor(author: string) {
this.http.get<{message: string, posts: any, maxPosts: number }>(BACKEND_URL + 'api/search/' + author)
.pipe(map((postData) => {
console.log(postData);
return { posts: postData.posts.map((post) => {
return {
title: post.title,
content: post.content,
author: post.author,
genre: post.genre,
id: post._id,
imagePath: post.imagePath,
creator: post.creator
};
}),
maxPosts: postData.maxPosts};
}))
.subscribe(transformedPostsData => {
this.posts = transformedPostsData.posts;
return this.posts;
});
}
getPostsByGenre(genre: string) {
this.http.get<{message: string, posts: any, maxPosts: number }>(BACKEND_URL + 'api/search/' + genre)
.pipe(map((postData) => {
console.log('Genre_');
console.log(postData);
return { posts: postData.posts.map((post) => {
return {
title: post.title,
content: post.content,
author: post.author,
genre: post.genre,
id: post._id,
imagePath: post.imagePath,
creator: post.creator
};
}),
maxPosts: postData.maxPosts};
}))
.subscribe(transformedPostsData => {
this.posts = transformedPostsData.posts;
return this.posts;
});
}
Маршрут в app.js
,
app.use('/api/search', searchRoutes);
search.js
в папке маршрута,
const express = require('express');
const router = express.Router();
const SearchController = require('../controllers/search');
router.get("/:author", SearchController.getPostsByAuthor);
router.get("/:Genre", SearchController.getPostsByGenre);
module.exports = router;
Здесь последовательно заданы контроллеры,
const Post = require('../models/post');
const User = require('../models/user');
exports.getPostsByAuthor = (req, res, next) => {
let maxPosts = 10;
Post.find({ author: req.params.author }).then(posts => {
if(posts) {
res.status(200).json({
posts,
message: "Post was successful",
max: maxPosts
});
} else {
res.status(500).alert('Not Found, double check the spelling').json({
message: "Failed to get User Post"
});
}
});
}
exports.getPostsByGenre = (req, res, next) => {
let maxPosts = 10;
Post.find({ genre: req.params.genre }).then(posts => {
if(posts) {
res.status(200).json({
posts,
message: "Post weirdo successful",
max: maxPosts
});
} else {
res.status(500).json({
message: "Failed to get User Post"
});
}
});
}
Первый всегда запускается, что означает getPostsByAuthor
, второй никогда не запускается.
Я проверил, изменив порядок, когда я поставил getPostsByGenre
в первой позиции, после которой он был запущен, и getPostsByAuthor
не запустился, поскольку он был размещен второй в порядке.
Контроллер, помещенный в первую позицию по порядку, отлично возвращает данные, это означает, что маршрут достигает файла controller
.
Я не понимаю, в чем проблема.Не нашел подобных вопросов в СО.
Я все еще новичок в разработке со стеком MEAN, минимум подсказок означал бы большую помощь.Спасибо.