【问题标题】:Make calls to server without specifying full URL everytime每次都调用服务器而不指定完整的 URL
【发布时间】:2020-04-12 21:36:25
【问题描述】:

我正在运行一个带有 React-Typescript 前端的 springbok 应用程序。一切正常。我目前使用以下方法发出请求: get('http://localhost:8080/api/items/allItems', {json: true}) 使用 request-promise 库。我希望每次都能够在不指定完整的“localhost:8080”的情况下拨打电话……有没有办法做到这一点?

所以我想get('api/items/allItems', {json: true}) 甚至get('api/items/allItems') 而不是每次都指定 json。

有提供此功能的库吗?或者更好的是关于我应该如何设置它的任何建议?我尝试在我的 package.json 中使用 proxy,但由于某种原因它不适用于这些调用。

【问题讨论】:

    标签: javascript reactjs spring typescript npm


    【解决方案1】:

    如果你在同一个端口工作,你不需要指定完整的 url(如果你这样做,这是一个不好的做法)如果你正在使用 CreateReactApp 那么你应该把代理放到你试图调用的服务器上并尝试在调用的开头添加slash/,因为你想从根目录调用,所以用get('/api/items/allItems')替换get('api/items/allItems')

    【讨论】:

    • 这不起作用。我收到了错误n {name: "RequestError", message: "Error: Invalid URI "/api/items/allItems"", cause: Error: Invalid URI "/api/items/allItems" at U.<anonymous> (http://localhost:8080/static/js/main…, error: Error: Invalid URI "/api/items/allItems" at U.<anonymous> (http://localhost:8080/static/js/main…, options: {…}, …}
    • 那么服务器无法识别您的 url - 你确定你正确定义了你的路由吗?
    【解决方案2】:

    您应该代理到您尝试调用的服务器,这是通过添加来完成的

    "proxy": "http://localhost:8080"
    

    到你的 package.json。然后你就可以fetch('/api/items/allItems'),这将被代理到你的后端资源。

    【讨论】:

    • 我有那条线路,我可以使用 fetch 进行这些调用。我无法使用我正在使用的 request-promise 模块来完成它们
    • 我明白了。我不熟悉那个包,你能详细说明它给你的项目带来的价值吗?也许它可以与其他一些香草资源交换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 2011-01-17
    • 2020-03-27
    相关资源
    最近更新 更多