Я перевожу приложение на Next.js на Node.js. Я создал сервис: commentService.js и контроллер: commentControllers.js
Это сервис:
const prisma = require('../libs/prisma');
async function createComment(adId, profileId, comment, medias) {
return await prisma.comment.create({
data: {
value: comment,
profile: {
connect: {
id: profileId
}
},
ad: {
connect: {
id: adId
}
},
...(medias && medias.length > 0
? {
medias: {
connect: medias.map((media) => ({ id: media.id }))
}
}
: {})
}
});
}
module.exports = {
createComment,
getAllComment,
createResponseComment,
getLikeAndDislikeComment,
createLikeComment,
deleteLikeComment,
createDislikeComment,
deleteDislikeComment,
getAllResponseComment,
createLikeResponseComment,
createDislikeResponseComment,
deleteLikeResponseComment,
deleteDislikeResponseComment
};
Это контроллер:
const { response } = require('express');
const commentService = require('../services/commentService');
async function createCommentController(req, res) {
const { adId, profileId, comment, medias } = req.body;
try {
const newReport = await createComment(adId, profileId, comment, medias);
res.status(201).json(newReport);
} catch (error) {
res.status(400).json({ error: error.message });
}
}
module.exports = {
createCommentController,
getAllCommentController,
createResponseCommentController,
getLikeAndDislikeCommentController,
createLikeCommentController,
deleteLikeCommentController,
createDislikeCommentController,
deleteDislikeCommentController,
getAllResponseCommentController,
createLikeResponseCommentController,
deleteLikeResponseCommentController,
createDislikeResponseCommentController,
deleteDislikeResponseCommentController
};
Я новичок в Node.js (это не полный код, это начало и конец), проблема, с которой я столкнулся, в том, что значение объявлено, но никогда не используется.
Я изменил название контроллера в конце экспорта модуля, чтобы убедиться, что мои функции вызываются.
Я ожидаю, что значения будут прочитаны.
Ответ
Конечно! Давайте разберёмся с вашей проблемой.
Проблема
Вы столкнулись с предупреждением о том, что значения объявлены, но никогда не считываются. Больше всего это связано с тем, что в вашем контроллере вы вызываете createComment
, но не указываете его откуда — это должно быть вызвано из commentService.js
.
Исправленный код
Ниже представлен обновленный код с необходимыми исправлениями:
В файле commentService.js
const prisma = require('../libs/prisma');
async function createComment(adId, profileId, comment, medias) {
if (!comment || !profileId || !adId) {
throw new Error('Необходимые параметры не заданы');
}
return await prisma.comment.create({
data: {
value: comment,
profile: {
connect: {
id: profileId
}
},
ad: {
connect: {
id: adId
}
},
...(medias && medias.length > 0
? {
medias: {
connect: medias.map((media) => ({ id: media.id }))
}
}
: {})
}
});
}
// Экспортируйте функции
module.exports = {
createComment,
// Экспорт других функций, если они определены
};
В файле commentController.js
const { response } = require('express');
const commentService = require('../services/commentService');
async function createCommentController(req, res) {
const { adId, profileId, comment, medias } = req.body;
try {
// Здесь вы должны вызывать функцию из commentService
const newComment = await commentService.createComment(adId, profileId, comment, medias);
res.status(201).json(newComment);
} catch (error) {
res.status(400).json({ error: error.message });
}
}
// Экспортируйте функции
module.exports = {
createCommentController,
// Экспорт других контроллеров, если они определены
};
Объяснение изменений
-
Использование правильного имени функции: Во избежание путаницы, я изменил
createComment
наcommentService.createComment
. Теперь контроллер явно вызывает функцию из сервиса. -
Проверка входных данных: Я добавил проверку на наличие необходимых параметров (
adId
,profileId
,comment
). Это поможет избежать ошибок при выполнении. - Убедитесь, что другие функции правильно определены и экспортированы: Убедитесь, что все остальные функции в ваших сервисах и контроллерах определены и корректно экспортированы. Если вы не собираетесь их использовать, лучше удалить их, чтобы избежать путаницы.
Теперь, если вы вызовете контроллер, значения должны считываться корректно, и предупреждение об "объявленных, но не прочитанных" значениях не должно появляться.
Заключение
Эти изменения и рекомендации должны помочь вам правильно организовать код и избежать упомянутых вами проблем. Если у вас есть дополнительные вопросы или проблемы, не стесняйтесь задавать их!