You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swagger调用Express+Firebase API遇CORS及Firestore值错误求助

问题分析与解决步骤

1. 修正Swagger服务器配置(解决请求地址错误/跨域)

你的swagger.js中服务器配置和本地服务不匹配,这是导致Swagger请求失败的核心原因之一:

  • 本地服务端口为8080(或环境变量指定端口),但配置中写了8081
  • 本地开发通常用http而非https(除非你配置了本地SSL证书)
  • host: "/"是无效配置,直接移除即可

修改swagger.js的servers段:

servers: [
  {
    url: "http://localhost:8080/menusapi/api/v1/", // 匹配你的本地服务端口和路由前缀
  },
],
// 删除host字段

2. 调整CORS配置(适配Swagger UI请求)

当前CORS配置仅允许http://localhost:${port}的请求,虽然Swagger UI页面本身就在这个地址下,但如果后续有端口变动或其他场景,建议改成更灵活的判断逻辑:

app.use(
  cors({
    origin: (origin, callback) => {
      // 允许本地请求(包括Swagger UI和Postman)
      if (!origin || origin.startsWith('http://localhost')) {
        callback(null, true);
      } else {
        callback(new Error('CORS不允许该来源'));
      }
    },
    methods: ["GET", "POST", "DELETE", "PUT", "PATCH"],
    credentials: true,
  })
);

3. 修复Firestore的undefined参数错误

控制台抛出的Cannot use "undefined" as a Firestore value错误,是因为登录接口的请求参数缺失,导致传给Firestore的查询约束为undefined。原因是Swagger注释没有正确定义请求体参数,导致界面发起请求时未传递必填字段。

在auth_controller.js的login方法中补充请求体的Swagger注释:

exports.login = async (req, res) => {
/* #swagger.tags = ['Auth']
#swagger.description = '用户登录接口';
#swagger.summary = "用户登录到应用";
#swagger.security = [{
"bearerAuth": [] // 登录接口无需提前携带token,建议用bearerAuth或移除security配置
}]
#swagger.requestBody = {
  required: true,
  content: {
    "application/json": {
      schema: { $ref: "#/definitions/Login" } // 引用你定义的Login Schema
    }
  }
}
#swagger.responses[200] = {
description: '登录成功',
schema: {
"message": "登录成功!",
"jwt": "一串长令牌",
"refresh_jwt": "另一串长令牌"
}
}
*/
// 业务代码中先校验参数是否存在
const { email, password } = req.body;
if (!email || !password) {
  return res.status(400).json({ message: "邮箱和密码不能为空" });
}
// 后续Firestore查询逻辑,确保传递的参数均为有效值
};

4. 重新生成Swagger文档

修改完注释后,重新运行swagger-autogen命令生成最新的swagger.json,确保Swagger界面能正确渲染必填参数输入框。

5. 验证请求流程

启动服务后,在Swagger界面的登录接口中填写完整的请求体参数(如邮箱、密码),再发起请求,检查是否解决错误。


内容的提问来源于stack exchange,提问作者Sulac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 06:09:19