首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在进行API调用时动态设置目标

问在进行API调用时动态设置目标
EN

Stack Overflow用户
提问于 2021-12-19 07:50:41
回答 1查看 174关注 0票数 0

我正在建立一个多租户网站与React和Django。

这是我的setupProxy.js文件:

代码语言:javascript
复制
const { createProxyMiddleware } = require('http-proxy-middleware');

module.exports = function(app) {
  app.use(
    '/api/products',
    createProxyMiddleware({
      target: 'http://tenant1.localhost:8000',
      changeOrigin: true,
      secure: false,
    })
  );
};

这是可行的,但我需要目标值是'http://tenant1.localhost:8000‘或'http://tenant2.localhost:8000'or 'http://tenant3.localhost:8000’等等.取决于子域或租户。

这样做的目的是从URL中获取子域,例如http://tenant1.localhost:3000。

有人知道我是怎么做到的吗?

另外,我是这样调用API请求的:

代码语言:javascript
复制
import React, { useState, useEffect } from 'react'
import { Row, Col } from 'react-bootstrap'
import Product from '../components/Product'

import axios from 'axios'

function HomeScreen() {
    const [products, setProducts] = useState([])  /* const[state, method] */

    useEffect(() => {

        async function fetchProducts(){
            const { data } = await axios.get('api/products/')
            setProducts(data)
        }

        fetchProducts()

    }, [])

    return (
        <div>
            <h1>Latest Products</h1>
            <Row>
                {products.map(product => (
                    <Col key={product._id} sm={12} md={6} lg={4} xl={3}>
                        <Product product={product} />
                    </Col>
                ))}
            </Row>
        </div>
    )
}

export default HomeScreen

谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-12-21 06:42:46

我想我可能已经找到了一个初步的解决方案:

setupProxy.js:

代码语言:javascript
复制
const { createProxyMiddleware } = require('http-proxy-middleware');

function customRouter(req) {
  const { hostname } = req
  const tenant = hostname.split('.')[0]
  return `http://${tenant}.localhost:8000`
}

module.exports = function(app) {
  app.use(
    '/api/products',
    createProxyMiddleware({
      router: customRouter,
      changeOrigin: true,
      secure: false,
    })
  );
  app.use(
    '/media/*',
    createProxyMiddleware({
      router: customRouter,
      changeOrigin: true,
      secure: false,
    })
  );
};

这是这里给我的。我对JS的反应非常新,所以我不知道这是否是一个好的解决方案。此外,我还需要找到一种方法来路由本地主机:3000成功.

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

https://stackoverflow.com/questions/70409722

复制
相关文章

相似问题

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