Получение ошибки «Route.post () требует функцию обратного вызова, но получил [объект Undefined]» - PullRequest
0 голосов
/ 26 марта 2020

Может кто-нибудь объяснить мне, почему я получаю эту ошибку? Вот мой код, где я получаю эту ошибку. Я предполагаю, что это из-за импорта / экспорта в моем коде?

emailController

const User = require("../models/User")
const jwt = require("jsonwebtoken")
const { transporter, getResetPasswordURL, resetPasswordTemplate } = require("../utils/mailer")

    module.exports = {
        createOneTimeTokenAndSendMail: async (req, res) => {
            const email = req.params.email
            try {
                const user = await User.findOne({ email })
                if (!user) {
                    return res.status(404).json({ error: "No user with that email "})
                }
                const hashedPassword = user.password
                const createdAt = user.createdAt
                const userId = user._id
                const secret = hashedPassword + "-" + createdAt
                const token = jwt.sign({ userId }, secret, {
                    expiresIn: 3600
                })

                const url = getResetPasswordURL(user, token)
                const emailTemplate = resetPasswordTemplate(user, url)

                const sendEmail = () => {
                    transporter.sendMail(emailTemplate, (err, info) => {
                        if (err) {
                            res.status(500).json("Error sending email")
                        }
                        console.log("email sent", info.response)
                    })
                }
                sendEmail()
            } catch (error) {
                res.status(500).json({ error })
            }
        }
    }

mailer


const User = require("../models/User")
const jwt = require("jsonwebtoken")
const {
  transporter,
  getResetPasswordURL,
  resetPasswordTemplate
} = require("../utils/mailer")

module.exports = {
  createOneTimeTokenAndSendMail: async (req, res) => {
    const email = req.params.email
    try {
      const user = await User.findOne({ email })
      if (!user) {
        return res.status(404).json({ error: "No user with that email " })
      }
      const hashedPassword = user.getPassword
      const createdAt = user.createdAt
      const userId = user._id
      const secret = hashedPassword + "-" + createdAt
      const token = jwt.sign({ userId }, secret, {
        expiresIn: 3600
      })

      const url = getResetPasswordURL(user, token)
      const emailTemplate = resetPasswordTemplate(user, url)

      const sendEmail = () => {
        transporter.sendMail(emailTemplate, (err, info) => {
          if (err) {
            res.status(500).json("Error sending email")
          }
          console.log("email sent", info.response)
        })
      }
      sendEmail()
    } catch (error) {
      res.status(500).json({ error })
    }
  }
}

Это маршрут, который вызывает вышеуказанную ошибку:

router.post("/reset-password/:email", emailController.createOneTimeTokenAndSendMail)

Я постоянно сталкивался с подобными ошибками, поэтому хотел бы раз и навсегда избавиться от своих сомнений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...