如何指定正确的网址来模拟假后端?

时间:2019-12-26 16:20:28

标签: async-await mocking axios frontend backend

我使用Axios发出异步/等待获取请求以模拟/伪造后端API

这是代码: src / fakeBackend / feedbacks.js

    const { createGuid } = require('../utils/guid')
    const { users } = require('./users')

    const feedback = {
      extern: [
        {
          id: createGuid(),
          userId: users[0].id,
          message: '',
          date: new Date(2016, 2, 3).valueOf(),
        },
        {
          id: createGuid(),
          userId: users[4].id,
          message: '',
          date: new Date(2018, 10, 2).valueOf(),
        },
      ],
    }

src / fakeBackend / mock.js

const axios = require("axios");
const { parse } = require("url");
const MockAdapter = require("axios-mock-adapter");

const { feedback } = require("./feedbacks");

const instance = axios.create();
const mock = new MockAdapter(instance);

const extractData = ({ data, params, url }) => {
  const { query } = parse(url, true);
  const parsedData = data && JSON.parse(data);

  return { ...query, ...params, ...parsedData };
};

mock.onGet(/feedback.*/).reply(config => {
  let parsed;

  try {
    parsed = extractData(config);
  } catch (e) {
    return [400, { message: "incorrect data format" }];
  }

  if (!parsed.product) {
    return [400, { message: "Product id not specified" }];
  }

  const feedbackForProduct = feedback[parsed.product];

  if (feedbackForProduct) {
    return [200, { feedback: feedbackForProduct }];
  }

  return [404, { message: "No such product exists." }];
});

module.exports = { axios: instance };

src / client.js

我在函数getFeedbackByProductViewData中有axios请求

const { axios } = require("./fakeBackend/mock");

const getFeedbackByProductViewData = async (product) => {
  let feedback;
  await axios.get('/feedback', {
    params: {
      product: product
    }
  })
    .then((response) => {
      console.log(response);
      feedback = response.data;
    }, (error) => {
      console.log(error);
    });
  return feedback;
};
module.exports = { getFeedbackByProductViewData };

请求返回404。我认为网址不正确。 如何指定正确的网址来模拟假后端?

0 个答案:

没有答案