提问人:Lokesh 提问时间:10/30/2023 更新时间:10/30/2023 访问量:38
此 Serverless 函数已崩溃
This Serverless Function has crashed
问:
我正在尝试在 vercel 中部署后端 express 应用程序,其中服务器仅使用 nodemailer 处理邮件 api。
我的package.json
这是我的服务器.js
import express from "express";
import cors from "cors";
import bodyParser from "body-parser";
import nodemailer from 'nodemailer';
import { config } from "dotenv";
config()
const app = express();
app.use(bodyParser.json({ limit: "100mb" }));
app.use(bodyParser.urlencoded({ limit: "100mb", extended: true }));
app.use(cors({credentials:true}));
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: process.env.EMAIL_USER, // Use environment variables instead of hardcoding
pass: process.env.EMAIL_PASSWORD, // Use environment variables instead of hardcoding
}
});
function sendEmail(req, res) {
const { name, email, message } = req.body;
const mailOptions = {
from: process.env.EMAIL_USER,
to: process.env.RECIEVER_MAIL,
subject: `You got a message from ${name}`,
html: `<h4>Hello, Someone Contacted you through contact Form</h4>
<h4>Name: ${name}</h4>
<h4>Email: ${email}</h4>
<p>Message: ${message}</p>
`
,
};
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
console.log(error);
res.status(500).json({code:500, error: 'Failed to send email' });
} else {
console.log('Email sent: ' + info.response);
res.status(200).json({code:200,success: 'Email sent successfully' });
}
});
}
app.get('/', (req, res)=>{
res.send("This is my api running!")
})
app.post('/contact', (req, res) => {
sendEmail(req, res);
});
const PORT = process.env.PORT || 5000;
app.listen(process.env.PORT,()=>{
console.log(`App listening on port ${PORT}`)
})
这是我的vercel.json
{
"version": 2,
"builds": [
{
"src": "server.js",
"use": "@now/node"
}
],
"routes": [
{
"src": "/(.*)",
"dest": "server.js"
}
]
}
我在日志中遇到的错误。
未捕获的异常 {“errorType”:“ReferenceError”,“errorMessage”:“require 未在 ES 模块作用域中定义,您可以改用导入\n此文件被视为 ES 模块,因为它具有”.js“文件扩展名,并且”/var/task/package.json“包含”type“:”模块”。要将其视为CommonJS脚本,请将其重命名为使用“.cjs”文件扩展名.“,”stack“:[”ReferenceError:ES模块范围中未定义要求,您可以改用import“,”此文件被视为ES模块,因为它具有“.js”文件扩展名,并且“/var/task/package.json”包含“type”:“module”。module_job file:///var/task/___now_launcher.js:1:18 要将其视为 CommonJS 脚本,请将其重命名为使用“.cjs”文件扩展名。 未捕获的异常 {“errorType”:“ReferenceError”,“errorMessage”:“require 未在 ES 模块作用域中定义,您可以改用导入\n此文件被视为 ES 模块,因为它具有”.js“文件扩展名,并且”/var/task/package.json“包含”type“:”模块”。要将其视为CommonJS脚本,请将其重命名为使用“.cjs”文件扩展名.“,”stack“:[”ReferenceError:ES模块范围中未定义要求,您可以改用import“,”此文件被视为ES模块,因为它具有“.js”文件扩展名,并且“/var/task/package.json”包含“type”:“module”。module_job file:///var/task/___now_launcher.js:1:18 要将其视为 CommonJS 脚本,请将其重命名为使用“.cjs”文件扩展名。 发生未知应用程序错误 运行时未知
答:
从包 json 中删除 “type”:“module”,然后重试。
评论