首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTTP错误:没有Nuxt.js ok状态

HTTP错误:没有Nuxt.js ok状态
EN

Stack Overflow用户
提问于 2021-05-17 13:02:45
回答 1查看 164关注 0票数 0

我正在构建一个Nuxt.js应用程序,并且遇到了CORS错误。我已经在我请求资源的服务器上启用了CORS,解决了我最初的CORS错误,但现在我看到了一个新的错误,“它没有HTTP ok状态”。

这是来自Nuxt.js应用程序的标注。

代码语言:javascript
复制
async executeCallout(context, payload) {

    // Start loading...
    let loadingId = context.dispatch('handleLoad', { 
      msg: 'Getting the thing', 
      method: 'executeCallout', 
      id: null 
    }, { root: true });

    // Execute http request. 
    let url = context.getters.getCalloutUrl(payload.func);
    let response = await this.$axios({
      method: 'post', 
      headers: {
        "Content-type": "application/json"
      },
      url: url,
      data: payload.body
    });

    // Resolve loading...
    context.dispatch('handleLoad', {
      msg: null, 
      method: null, 
      id: loadingId
    }, { root: true });
    
    // Handle http response.
    if (response.data.success) {
      return response.data;
    } else {
      context.dispatch('handleError', { 
        msg: response.data.data, 
        origin: 'callouts.js', 
        method: 'executeCallout' 
      }, { root: true })
    }
  }
};

下面是处理该请求的google云函数。

代码语言:javascript
复制
const helper = require('./helper');
const Joi = require('joi');

exports.handler = async (req, res) => {
  try {

    // Set headers
    res.set('Access-Control-Allow-Origin', '*');
    if (req.method == 'OPTIONS') {
      res.set('Access-Control-Allow-Methods', 'POST', 'OPTIONS');
      res.set('Access-Control-Allow-Headers', 'Content-Type');
    }

    const payload = await schema.validate(req.body);
    if (payload.error) {
      res.status(400).json({
        success: false, 
        data: payload.error
      })
    } else {
      if (payload.value.product == 'quickbooks') {
        let response = await helper.functionCall({ alias: payload.value.alias, function: 'intuit', payload: payload.value.payload });
        res.status(response.success ? 200 : 400).json({
          success: response.success ? true : false, 
          data: response.data
        })
      } else if (payload.value.product == 'distance-matrix') {
        let response = await helper.functionCall({ alias: payload.value.alias, function: 'distance-matrix', payload: payload.value.payload });
        res.status(response.success ? 200 : 400).json({
          success: response.success ? true : false, 
          data: response.data
        })
      }
    }
  } catch (err) {
    res.status(500).json({
      success: false, 
      data: err
    })
  }
}

const schema = Joi.object({
  alias: Joi.string().required(), 
  product: Joi.string(),
  action: Joi.string(), 
  payload: Joi.object()
})

尝试发送请求时的响应如下所示。

EN

回答 1

Stack Overflow用户

发布于 2021-05-17 13:26:28

您可能需要设置飞行前响应的HTTP状态。

代码语言:javascript
复制
const helper = require('./helper');
const Joi = require('joi');

exports.handler = async (req, res) => {
  try {

    // Set headers
    res.set('Access-Control-Allow-Origin', '*');

    if (['POST', 'OPTIONS'].includes(req.method)) {
      res.set('Access-Control-Allow-Methods', 'POST', 'OPTIONS');
      res.set('Access-Control-Allow-Headers', 'Content-Type');
    }

    if (req.method == 'OPTIONS') {
      res.status(200)
      return
    }

    const payload = await schema.validate(req.body);

    if (payload.error) {
      res.status(400).json({
        success: false,
        data: payload.error
      })
    } else {
      if (payload.value.product == 'quickbooks') {
        let response = await helper.functionCall({
          alias: payload.value.alias,
          function: 'intuit',
          payload: payload.value.payload
        });
        res.status(response.success ? 200 : 400).json({
          success: response.success ? true : false,
          data: response.data
        })
      } else if (payload.value.product == 'distance-matrix') {
        let response = await helper.functionCall({
          alias: payload.value.alias,
          function: 'distance-matrix',
          payload: payload.value.payload
        });
        res.status(response.success ? 200 : 400).json({
          success: response.success ? true : false,
          data: response.data
        })
      }
    }
  } catch (err) {
    res.status(500).json({
      success: false,
      data: err
    })
  }
}

const schema = Joi.object({
  alias: Joi.string().required(),
  product: Joi.string(),
  action: Joi.string(),
  payload: Joi.object()
})

注意我添加的代码:

代码语言:javascript
复制
    if (['POST', 'OPTIONS'].includes(req.method)) {
      res.set('Access-Control-Allow-Methods', 'POST', 'OPTIONS');
      res.set('Access-Control-Allow-Headers', 'Content-Type');
    }

    if (req.method == 'OPTIONS') {
      res.status(200)
      return
    }

我还没有用过谷歌云函数,所以我不确定是不是出了什么问题。如果有反馈,请给我反馈。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67564236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档