-
카테고리
-
세부 분야
풀스택
-
해결 여부
해결됨
해시태그 검색관련 질문있습니다.
24.03.06 01:35 작성 조회수 98
0
자주 질문을 드려 죄송합니다. ㅠㅠ 모르는게 많아서 ㅠㅠ
그 해시태그 부분을 작업 하고 있는데 제가 해시태그를 클릭하게 되면 예를 들러 123123을 클릭을 한다 라고 하면
기존 아래에서
검색이 될시
이런식으로 해시태그가 123123만 나오고 나머지 것들은 안나오는 현상이 나오고 있습니다.
코드 같은 경우는 알려주신데로
router.get("/:hashtag", async (req, res, next) => {
try {
const users = req.user ? req.user.id : null;
const offset = (parseInt(req.query.page) - 1) * 10 || 0
const {
count,
rows: post
} = await Post.findAndCountAll({
offset: offset,
limit: 10,
// DESC 최신순 ASC 오래된순
order: [
["createdAt", "DESC"]
],
include: [
{
model: Hashtag,
where: {
hashtag: req.params.hashtag
},
attributes: ["hashtag"],
through: {
attributes: []
},
}, {
model: Image,
attributes: ["src"],
},{
model: User,
attributes: ["nickName"],
}],
attributes: [
"id",
"title",
"createdAt",
"view",
"content",
// 좋아요 수
[Sequelize.literal("(SELECT COUNT(*) FROM `Like` WHERE `Like`.`postId` = `Post`.`id`)"), "count"],
// 좋아요 여부
[Sequelize.literal("IF((SELECT `postId` FROM `Like` WHERE `Like`.`postId` = `Post`.`id` AND `Like`.`userId` = " + users + "), 1, 0)"), "like"],
],
})
const posts = post.map((post) => {
const format = post.toJSON()
format.hashtag = format.Hashtags.map((tag)=>tag.hashtag)
format.src = format.Images.map((img) => img.src).join("")
format.nickname = format.User.nickName
format.content = format.content.replace(/<[^>]+>|<img.*?>/g, "");
delete format.Images;
delete format.User;
delete format.Hashtags;
return format;
})
res.status(201).json({
count,
posts
})
} catch (error) {
console.error(error)
next(error)
}
})
이렇게 작성을 하였는데 찾아 보니
where: { hashtag: req.params.hashtag },
이렇게 작성을 하게 되면 해당 해시태그에 해당하는 게시물이 불러와 지기는 하는데 검색된 해시태그만 뽑아서 나타나지게 되니
where: {
hashtag: {
[Op.contains]: [`${req.params.hashtag}`]
}
},
이런식으로 작성을 하면 된다고 해서 써봣는데
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''asd' LEFT OUTER JOIN Images
AS Images
ON Post
.`id` = Images
.`PostId` LE' at line 1",
sql: "SELECT count(`Post`.`id`) AS count
FROM Posts
AS Post
INNER JOIN ( PostHashtag
AS Hashtags->PostHashtag
INNER JOIN Hashtags
AS Hashtags
ON Hashtags
.`id` = Hashtags->PostHashtag
.`HashtagId`) ON Post
.`id` = Hashtags->PostHashtag
.`PostId` AND Hashtags
.`hashtag` <@ 'asd' LEFT OUTER JOIN Images
AS Images
ON Post
.`id` = Images
.`PostId` LEFT OUTER JOIN Users
AS User
ON Post
.`UserId` = User
.`id`;",
이런 에러가 나더라구요... 왜 images에 관련된 문구가 나오는지는 모르겟지만.... 혹시 mysql에서 contains메소드가 사라진건지 아닌지 혹시 고칠수 잇는건지 궁금합니다.
제 sequelize 버전은 6.35.2 입니다. ㅠㅠ
답변을 작성해보세요.
답변 1