Rumah  >  Soal Jawab  >  teks badan

Nextjs 13 ralat: Percubaan untuk membaca sifat yang tidak ditentukan (membaca 'header')

<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粉652495194P粉652495194437 hari yang lalu494

membalas semua(1)saya akan balas

  • P粉226413256

    P粉2264132562023-09-01 16:22:15

    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 }));
      });
    });
    

    balas
    0
  • Batalbalas