Nextjs 13錯誤:嘗試讀取未定義的屬性(讀取'headers')
P粉652495194
2023-08-31 16:47:14
<p>在我的Nextjs中創建的post API端點的標題中遇到了問題。 </p>
<p>我的端點用於表單提交,我將輸入轉發到我的電子郵件。我的當前程式碼可以發送電子郵件,並且我可以在我的電子郵件中正常接收到它,但是每次我發出請求時,它都會傳回標題中的錯誤。 </p>
<pre class="brush:php;toolbar:false;">import { NextResponse, NextRequest } 從 "next/server"
import nodemailer from "nodemailer"
export async function POST(request: NextRequest, response: NextResponse) {
const formData = await request.formData()
const emailValue = formData.get("email")
const messageValue = formData.get("message")
const numberValue = formData.get("phone_number")
if (!messageValue || !numberValue || !emailValue) {
return NextResponse.json({ message: "請填入所有必填欄位!" }, { status: 400 })
}
const transporter = nodemailer.createTransport({
service: "gmail",
auth: {
user: process.env.EMAIL,
pass: process.env.PASSWORD,
},
tls: {
rejectUnauthorized: false,
},
})
const mailOptions = {
從: `${emailValue}`,
to: `${process.env.EMAIL}`,
subject: `來自聯絡我頁面的訊息 ${numberValue} - ${emailValue} `,
text: `${messageValue}`,
}
transporter.sendMail(mailOptions, (err, info) => {
if (err) {
return NextResponse.json({ message: `${err}` }, { status: 500 })
}
return NextResponse.json({ message: "電子郵件發送成功!" }, { status: 200 })
})
}</pre>
<p>我不確定我做錯了什麼。我在一個線程中讀到關於在return語句中執行NextResponse的內容,但即使這樣也沒有起作用。 </p>
<p>我得到的錯誤訊息:</p>
<pre class="brush:php;toolbar:false;">- 錯誤 TypeError: 無法讀取未定義的屬性(讀取'headers')
at eval (webpack-internal:///(sc_server)/./node_modules/next/dist/server/future/route-modules/app-route/module.js:261:61)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)</pre></p>
我會說問題與這個問題有關。
你最後兩個
return NextResponse...
呼叫在transporter.sendMail()
回呼內部,所以它們不會從POST()
函數中返回。利用Nodemailer的回傳promise的能力,而不是使用回呼函數...
另一種方法是將Nodemailer的回調轉換為promise,儘管在我看來這樣做不夠簡潔