Значения объявлены, но никогда не используются – Связь между сервисами и контроллером неясна

Вопросы и ответы

Я перевожу приложение на 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,
   // Экспорт других контроллеров, если они определены
};

Объяснение изменений

  1. Использование правильного имени функции: Во избежание путаницы, я изменил createComment на commentService.createComment. Теперь контроллер явно вызывает функцию из сервиса.

  2. Проверка входных данных: Я добавил проверку на наличие необходимых параметров (adId, profileId, comment). Это поможет избежать ошибок при выполнении.

  3. Убедитесь, что другие функции правильно определены и экспортированы: Убедитесь, что все остальные функции в ваших сервисах и контроллерах определены и корректно экспортированы. Если вы не собираетесь их использовать, лучше удалить их, чтобы избежать путаницы.

Теперь, если вы вызовете контроллер, значения должны считываться корректно, и предупреждение об "объявленных, но не прочитанных" значениях не должно появляться.

Заключение

Эти изменения и рекомендации должны помочь вам правильно организовать код и избежать упомянутых вами проблем. Если у вас есть дополнительные вопросы или проблемы, не стесняйтесь задавать их!

Оцените материал
Добавить комментарий

Капча загружается...