Nodemailer +手柄+ NextJS -正确路径

izkcnapc  于 2023-01-20  发布在  其他
关注(0)|答案(3)|浏览(107)

我在production中为我的nodemailer/handlebar设置查找正确的路径设置时遇到问题。传输器已连接到API请求以发送自动电子邮件。
development中,我保留了原来的配置,所以基本上我有这样的情况:

module.exports.ViewOption = (transport, hbs) => {
  transport.use('compile', hbs({
    viewEngine: {
      extname: '.hbs',
      partialsDir: 'static/js/mail/views/email',
      layoutsDir: 'static/js/mail/views',
      defaultLayout: 'contacts'
    },
    viewPath: 'static/js/mail/views',
    extName: '.hbs'
  }));
}

这里没有问题,一切都很好。
而在Now上,我收到了这个异常:

请求返回ok响应,如下所示:

所以我得出结论,这个问题与transporter config上设置的错误路径有关。我不能像在dev上那样生活,因为它在/var/tasks上重定向。问题是我尝试了不同的方法来正确定位文件路径,但没有成功:

  • 使用__dirname +'<path>'
  • 将其放置在/<path>...等平面中
  • 设置_next生产目录中的一个:/_next/static/....

这是我当前的文件系统:

正如你所看到的,我在/static/js/mail/config/_next/static/js/mail/config上都有配置文件,但都没有成功,调用每次都以相同的错误响应,与它的路径无关。
这是我目前的now.json,如果它可能有帮助:

{
  "public": false,
  "name": "LC",
  "version": 2,
  "routes": [{
    "src": "/resume",
    "dest": "https://lucacattide.dev/static/html/resume.html"
  }, {
    "src": "/robots.txt",
    "dest": "https://lucacattide.dev/static/robots.txt"
  }, {
    "src": "/sitemap.xml",
    "dest": "https://lucacattide.dev/static/sitemap.xml"
  }, {
    "src": "^/service-worker.js$",
    "dest": "/_next/static/service-worker.js",
    "headers": {
      "cache-control": "public, max-age=43200, immutable",
      "Service-Worker-Allowed": "/"
    }
  }],
  "env": {
    "RECAPTCHA_SECRET_KEY": "@recaptcha",
    "SMTP_SERVICE_HOST": "@smtp_host",
    "SMTP_SERVICE_PORT": "@smtp_port",
    "SMTP_SERVICE_SECURE": "@smtp_secure",
    "SMTP_USER_NAME": "@smtp_name",
    "SMTP_USER_PASSWORD": "@smtp_password",
    "SMTP_LOG_NAME": "@smtp_log"
  },
  "github": {
    "enabled": true,
    "autoAlias": false
  }
}

有没有人经历过这种情况或者可以以某种方式帮助我?
先谢了

yzxexxkh

yzxexxkh1#

我不确定这是这个问题的正确答案,但我遇到了类似于next js和电子邮件模板的东西,并从Nextjs文档中找到,也发现它正在工作:附加此处所附的代码示例。

rryofs0p

rryofs0p2#

正如我在GitHub上所说的,最后我找到了__dirname错误配置的原因,与 Webpack 配置有关。如StackOverflow上所建议的,在 Webpack 上停用它,如下所示:

{
  node: {
    __dirname: false
  }
}

客户端上仅使用节点配置中的__dirname
但是,不幸的是,这并不能解决我的问题,因为 NextJS 使用了多个 Webpack config -都是用于服务器端而不是客户端-所以在我的情况下,如果我尝试修改客户端配置,返回的路径指向 NextJS/pages/api文件夹。
由于事实上,由我目前的托管-Zeit.co无服务器环境-是不可能的,我设置一个适当的express自定义服务器,因为我会,我最终选择了第三方服务-EmailJS.

nzk0hqpo

nzk0hqpo3#

我发现使用path包中的resolve可以修复这个问题(至少对我来说是这样)。

import { resolve } from "path";

module.exports.ViewOption = (transport, hbs) => {
    const templateDir = resolve(process.cwd(), "static/js/mail/views");
    transport.use('compile', hbs({
        viewEngine: {
            extname: ".hbs", // handlebars extension
            layoutsDir: templateDir, // location of handlebars templates
            defaultLayout: "contact", // name of main template
            partialsDir: templateDir, // location of your subtemplates aka. header, footer etc
        },
        viewPath: templateDir,
        extName: ".hbs",
    }));
}

相关问题