我正在开发一个 Vercel 项目,其中包含本地开发环境(使用 vercel dev)和部署在 Vercel 无服务器平台上的生产环境。
我需要通过 GET 请求中的请求标头发送凭据(电子邮件、密码和 ID)。这在我的本地环境中完美运行,但在生产中,我收到以下错误:
Error: TypeError: Cannot read properties of undefined (reading 'email')
at module.exports (/var/task/api/user/user.js:16:16)
at Server.<anonymous> (/opt/rust/nodejs.js:2:11027)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Server.<anonymous> (/opt/rust/nodejs.js:9:6760)
错误发生在这里:
let email, pwd, userId;
try {
email = req.body.email || req.headers["email"] || req.headers?.email || null;
pwd = req.body.pwd || req.headers["pwd"] || req.headers?.pwd || null;
userId = req.body.participantId || req.headers["id"] || req.headers?.id || null;
} catch (err) {
console.error("Error parsing input:", err);
return res.status(400).json("Bad Request");
}
客户端GET请求:
axios.get(`/api/user/user/`, {headers: { "email": email, "pwd": pwd, id: participantId }}, { withCredentials: true })
.then((res) => res.data.fullName)
.catch((err) => {
console.log(err);
return "Error loading participant";
})
我尝试的调试步骤:
观察结果:
问题:
预先感谢您的帮助
在此代码中:
let email, pwd, userId;
try {
email = req.body.email || req.headers["email"] || req.headers?.email || null;
pwd = req.body.pwd || req.headers["pwd"] || req.headers?.pwd || null;
userId = req.body.participantId || req.headers["id"] || req.headers?.id || null;
} catch (err) {
console.error("Error parsing input:", err);
return res.status(400).json("Bad Request");
}
您正在尝试访问
req.body.email
和 req.body.pwd
和 req.body.pwd
作为变量赋值的第一部分。如果您不使用 body-parser 来解析传入的 POST
请求,则 req.body
将无法访问。这意味着当您尝试 req.body.email
时,它会立即抛出错误。
您正在使用
GET
发送 axios
请求,因此您可以删除 req.body.xyz
部分,或者如果您认为可以在应用程序中进一步使用 || null
请求,请将它们移到 POST
默认值之前发展。
在第一个实例中,我只会重构您的代码以删除它们,如下所示:
let email, pwd, userId;
try {
email = req.headers["email"] || req.headers?.email || null;
pwd = req.headers["pwd"] || req.headers?.pwd || null;
userId = req.headers["id"] || req.headers?.id || null;
} catch (err) {
console.error("Error parsing input:", err);
return res.status(400).json("Bad Request");
}