Maison  >  Questions et réponses  >  le corps du texte

Erreur Nextjs 13 : tentative de lecture de la propriété non définie (lecture des « en-têtes »)

<p>Je rencontre un problème avec les en-têtes de mon point de terminaison d'API post créé dans Nextjs. </p> <p>Mon point de terminaison est destiné à la soumission du formulaire et je transmets les entrées à mon courrier électronique. Mon code actuel peut envoyer l'e-mail et je le reçois correctement dans mon e-mail, mais chaque fois que je fais une demande, il renvoie une erreur dans l'en-tête. </p> <pre class="brush:php;toolbar:false;">importer { NextResponse, NextRequest } depuis "suivant/serveur" importer nodemailer depuis "nodemailer" exporter la fonction asynchrone POST (requête : NextRequest, réponse : NextResponse) { const formData = attendre request.formData() const emailValue = formData.get("email") const messageValue = formData.get("message") const numberValue = formData.get("numéro_téléphone") si (!messageValue || !numberValue || !emailValue) { return NextResponse.json({ message : "Veuillez remplir tous les champs obligatoires !" }, { status : 400 }) } const transporteur = nodemailer.createTransport({ service : "gmail", authentification : { utilisateur : process.env.EMAIL, passer : process.env.PASSWORD, }, à savoir : { rejeterNon autorisé : faux, }, }) const mailOptions = { de : `${emailValue}`, à : `${process.env.EMAIL}`, sujet : `Message de la page Contactez-moi ${numberValue} - ${emailValue} `, texte : `${messageValue}`, } transporter.sendMail(mailOptions, (err, info) => { si (erreur) { return NextResponse.json({ message : `${err}` }, { status : 500 }) } return NextResponse.json({ message : "E-mail envoyé avec succès !" }, { status : 200 }) }) }</pré> <p>Je ne suis pas sûr de ce que j'ai fait de mal. J'ai lu dans un fil de discussion sur l'exécution de NextResponse dans l'instruction return, mais même cela n'a pas fonctionné. </p> <p>Le message d'erreur que je reçois : </p> <pre class="brush:php;toolbar:false;"> - Erreur TypeError : Impossible de lire la propriété non définie (lecture des "en-têtes") à l'évaluation (webpack-internal:///(sc_server)/./node_modules/next/dist/server/future/route-modules/app-route/module.js:261:61) à process.processTicksAndRejections (node:internal/process/task_queues:95:5)</pre></p>
P粉652495194P粉652495194387 Il y a quelques jours441

répondre à tous(1)je répondrai

  • P粉226413256

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

    Je dirais que le problème est lié à cette question.

    Retournez dans vos deux dernières return NextResponse...调用在transporter.sendMail()回调内部,所以它们不会从POST() fonctions.

    Utilisez la capacité de Nodemailer à renvoyer des promesses au lieu d'utiliser les fonctions de rappel...

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

    Une autre approche consiste à convertir le rappel du Nodemailer en promesse, même si ce n'est pas assez concis à mon avis

    return new Promise((resolve) => {
      transporter.sendMail(mailOptions, (err) => {
        const status = err ? 500 : 200;
        const message = err?.toString() ?? "邮件发送成功!";
        resolve(NextResponse.json({ message }, { status }));
      });
    });
    

    répondre
    0
  • Annulerrépondre