Nextjs 13 ralat: Percubaan untuk membaca sifat yang tidak ditentukan (membaca 'header')
P粉652495194
P粉652495194 2023-08-31 16:47:14
0
1
490
<p>Saya menghadapi masalah dengan pengepala titik akhir API catatan saya yang dibuat dalam Nextjs. </p> <p>Titik akhir saya adalah untuk penyerahan borang dan saya memajukan input ke e-mel saya. Kod semasa saya boleh menghantar e-mel dan saya menerimanya dengan baik dalam e-mel saya, tetapi setiap kali saya membuat permintaan ia mengembalikan ralat dalam pengepala. </p> <pre class="brush:php;toolbar:false;">import { NextResponse, NextRequest } daripada "next/server" import nodemailer daripada "nodemailer" eksport fungsi async POST(permintaan: NextRequest, respons: NextResponse) { const formData = menunggu permintaan.formData() const emailValue = formData.get("e-mel") const messageValue = formData.get("mesej") const numberValue = formData.get("nombor_telefon") jika (!messageValue || !numberValue || !emailValue) { kembalikan NextResponse.json({ mesej: "Sila isikan semua medan yang diperlukan!" }, { status: 400 }) } pengangkut const = nodemailer.createTransport({ perkhidmatan: "gmail", pengesahan: { pengguna: process.env.EMAIL, pas: process.env.PASSWORD, }, tls: { menolakTidak dibenarkan: palsu, }, }) const mailOptions = { daripada: `${emailValue}`, kepada: `${process.env.EMAIL}`, subjek: `Mesej daripada halaman hubungi saya ${numberValue} - ${emailValue} `, teks: `${messageValue}`, } transporter.sendMail(mailOptions, (err, info) => { jika (err) { kembalikan NextResponse.json({ mesej: `${err}` }, { status: 500 }) } kembalikan NextResponse.json({ mesej: "E-mel berjaya dihantar!" }, { status: 200 }) }) }</pre> <p>Saya tidak pasti apa salah saya. Saya membaca dalam benang tentang melakukan NextResponse dalam penyata pulangan, tetapi itu tidak berjaya. </p> <p>Mesej ralat yang saya dapat: </p> <pre class="brush:php;toolbar:false;"> - Ralat JenisRalat: Tidak dapat membaca sifat yang tidak ditentukan (membaca 'header') di eval (webpack-internal:///(sc_server)/./node_modules/next/dist/server/future/route-modules/app-route/module.js:261:61) di process.processTicksAndRejections (node:internal/process/task_queues:95:5)</pre></p>
P粉652495194
P粉652495194

membalas semua(1)
P粉226413256

Saya akan mengatakan masalah itu berkaitan dengan soalan ini.

Kembalikan dalam dua return NextResponse...调用在transporter.sendMail()回调内部,所以它们不会从POST() fungsi terakhir anda.

Gunakan Keupayaan Nodemailer untuk membalas janji dan bukannya menggunakan fungsi panggil balik...

try {
  await transporter.sendMail(mailOptions);
  return NextResponse.json(
    { message: "邮件发送成功!" },
    { status: 200 },
  );
} catch (err) {
  return NextResponse.json({ message: err.toString() }, { status: 500 });
}

Pendekatan lain ialah menukar panggilan balik Nodemailer kepada janji, walaupun ini tidak cukup ringkas pada pendapat saya

return new Promise((resolve) => {
  transporter.sendMail(mailOptions, (err) => {
    const status = err ? 500 : 200;
    const message = err?.toString() ?? "邮件发送成功!";
    resolve(NextResponse.json({ message }, { status }));
  });
});
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!