POST请求不返回Allow-Origin标头

时间:2018-04-12 02:17:53

标签: node.js express cors aws-lambda fetch-api

我正在尝试在启用了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

2 个答案:

答案 0 :(得分:1)

我通过更新项目中的包并更改请求

来实现它
 const stringifiedBody = JSON.stringify(body) // added
  const params = {
    method,
    body: stringifiedBody,
    mode: 'cors',
    headers: { // added
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    }
  }

答案 1 :(得分:0)

我不确定这是否是复制错误,您没有以正确的方式指定获取方法 POST 。有时,未找到页面也会被识别为 CORS 问题。您是否尝试规范化获取参数?

params = {
 method: 'POST',
 body: body,
 mode:'cors'
}