Erreur Nextjs 13 : tentative de lecture de la propriété non définie (lecture des « en-têtes »)
P粉652495194
2023-08-31 16:47:14
<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>
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...
Une autre approche consiste à convertir le rappel du Nodemailer en promesse, même si ce n'est pas assez concis à mon avis