rocketseat-content / serie-api-rest-node

Código da série de API REST com NodeJS no Youtube
https://www.youtube.com/playlist?list=PL85ITvJ7FLoiXVwHXeOsOuVppGbBzo2dp
60 stars 28 forks source link

Envio de email - nodemailer #2

Closed laurobs8 closed 5 years ago

laurobs8 commented 5 years ago

Pessoal, estou com dificuldade em uma etapa da aula, que é referente ao envio de email.

seguindo os passos, tive o seguinte erro: Error: A partials dir must be a string or config object

Procurei algo sobre, e achei que precisava substituir transport.use('compile', hbs({ viewEngine: 'handlebars', viewPath: path.resolve('./src/resources/mail/'), extName: '.html', })); por

transport.use('compile', hbs({
    viewEngine: {
        defaultLayout: 'forgotPassword',
        partialsDir: '/src/resources/mails',
        extname: '.hbs',
    },
    viewPath: path.resolve("./", "./src/resources/mails/auth"),
}));

Mas no entanto, um erro persiste em aparecer que é: [Error: ENOENT: no such file or directory, open 'C:\Users\lbezerrs\Documents\node-API-REST\shares\src\resources\mails\auth\forgotPassword.handlebars']

Diretorio nao encontrado, apesar de ter checado diversas vezes o endereço, atualizado versões etc.

Alguém teve o mesmo erro ou pode ajudar a solucionar?

diego3g commented 5 years ago

Agora você precisa informar algumas coisas a mais na configuração do HBS, dá uma olhada nesse exemplo aqui: https://github.com/Rocketseat/bootcamp-gostack-03/blob/master/src/lib/Mail.js#L24

L1NDS0N commented 4 years ago

Embora seja tarde demais pra ressuscitar esta issue, o erro estava em uma abreviação do diretório "app" o qual era passado para o método resolve. O erro se encontra em: viewPath: path.resolve("./", "./src/resources/mails/auth") Aqui, após /src/ deve conter /app/ Por exemplo: viewPath: path.resolve("./", "./src/app/resources/mails/auth")

Espero que sirva para solucionar o problema de outros. @laurobs8

altenir commented 3 years ago

Resolvi assim

const viewPath = resolve(__dirname, '..', 'resources', 'mail', 'auth');
    transporter.use(
      'compile',
      nodemailerhbs({
        viewEngine: exphbs.create({
          layoutsDir: viewPath,
          defaultLayout: 'forgot_password',
          extname: '.html',
        }),
        viewPath,
        extName: '.html',
      })
    );