【发布时间】:2018-09-22 00:59:10
【问题描述】:
我正在尝试在启用了 cors 的 AWS lambda 上发出 POST 请求,并且我在 API 中使用了 cors 包。 然后我使用 fetch 发出 POST 请求,但出现此错误:
请求的资源上不存在“Access-Control-Allow-Origin”标头。
cors 包不应该对此进行处理,或者我需要做一些额外的配置?
api.js
import { json, urlencoded } from 'body-parser'
import express from 'express'
import cors from 'cors'
import recipe from './routes/recipe'
import login from './routes/login'
import unit from './routes/unit'
const app = express()
app.use(cors()) // enabling cors
app.use(json())
app.use(urlencoded({ extended: true }))
app.use('/recipes', recipe)
app.use('/login', login)
app.use('/units', unit)
request.js
const params = { 'POST', body, mode: 'cors' }
return await (await fetch(baseURL + endpoint, params)).json()
recipe.js
import { Router } from 'express'
const router = Router()
router.post('/', async ({ body }, res) => {
// save recipe in database
res.json(recipeId)
})
export default router
完整源代码 - api:https://github.com/EliasBrothers/zanzas-recipes-api/tree/beta-develop 前端 - https://github.com/EliasBrothers/zanzas-recipes-web/tree/develop
【问题讨论】:
-
您的 cors 配置似乎没问题。我想知道 request.js 在哪里运行?客户端还是 AWS lambda?
-
在 lambda 上运行,我使用 claudiajs 在 aws 上部署
-
和api.js是同一个项目吗?如果是这样,问题是应该在服务器端重新配置 CORS 设置,这意味着 baseURL 运行的位置。
-
api.js 在 lambda 上运行,请求在本地运行。在 aws 控制台中,我在这个 api 中启用了 cors
-
ApiGateway 是否启用了 Cors?我的意思是在您的资源中是否添加了 OPTIONS 方法作为模拟请求?
标签: node.js express cors aws-lambda fetch-api