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

浏览器可访问Node/MongoDB接口,Postman请求被拒,是CORS问题吗?

问题原因及解决方案

核心问题:CORS头配置错误

你的代码中Access-Control-Allow-Methods的设置方式存在错误:

response.header("Access-Control-Allow-Methods", "GET", "OPTIONS")

Express的response.header()方法仅接受两个核心参数:头字段名和头字段值。你传入的第三个参数"OPTIONS"会被直接忽略,导致实际生效的允许请求方法只有GET。当Postman发送OPTIONS预请求时,服务器返回的CORS头中不包含OPTIONS方法,直接触发CORS拒绝错误。

修复步骤

  1. 修正CORS中间件的方法配置
    将Access-Control-Allow-Methods的值改为逗号分隔的字符串,确保同时包含GET和OPTIONS:
app.use(function (request, response, next) {
  response.header("Access-Control-Allow-Origin", "*")
  response.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept")
  response.header("Access-Control-Allow-Methods", "GET, OPTIONS") // 合并为单个字符串
  next()
})
  1. 显式绑定OPTIONS请求处理(可选但推荐)
    在路由配置文件(routes.js)中,为/stories路由显式绑定OPTIONS请求的处理逻辑:
const { getStory, handleOptionsRequest } = require('./path/to/controller')

// 绑定OPTIONS和GET请求
app.options('/stories', handleOptionsRequest)
app.get('/stories', getStory)

补充说明

  • 浏览器能正常访问是因为简单GET请求可能不会触发OPTIONS预请求,而Postman会严格遵循CORS协议发送预请求,因此暴露了配置问题。
  • 你提到控制器函数已执行且能打印数据,说明实际GET请求已到达服务器,但由于预请求失败,Postman会拦截响应并抛出CORS错误,导致你看不到返回结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:17:20