Erreur Nextjs 13 : tentative de lecture de la propriété non définie (lecture des « en-têtes »)
P粉652495194
P粉652495194 2023-08-31 16:47:14
0
1
515
<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粉652495194
P粉652495194

répondre à tous(1)
P粉226413256

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 }));
  });
});
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal