如何使用服务器端 API 调用返回数据?

Posted

技术标签:

【中文标题】如何使用服务器端 API 调用返回数据?【英文标题】:How to return data using a server side API call? 【发布时间】:2021-12-27 15:19:05 【问题描述】:

我正在尝试在我的后端 node.js 应用程序中调用我的 api URL。以前我在前端 ajax 调用中传递了整个调用 url,但我想将它切换到服务器端 API 调用,这样我就不会暴露调用 url。我不熟悉在后端调用外部 API,所以我希望得到一些建议。我正在尝试使用 MVC 模式来保持代码整洁。

这是控制器

require('dotenv').config();
module.exports = 
    getModel: (req, res) => 
        const  buildingNumber, commodity, meter, trainStart, trainEnd, analysisStart, analysisEnd  = req.query
        try 

            const model = process.env.API_URL + `building_number=$buildingNumber&commodity_tag=$commodity&meter=$meter&train_start=$trainStart&train_end=$trainEnd&analysis_start=$analysisStart&analysis_end=$analysisEnd`
            return res.json(model)

         catch (error) 
            console.error(error.message)
        
    


这是我在前端 ajax 调用中使用的路由。

const router = require('express').Router()
const gatewayController = require('../controllers/apiGatewayModel')

router.get('/gateway', gatewayController.getModel);

module.exports = router

这是用于调用 api 的前端 ajax 调用。当我在前端运行这个 ajax 调用时,记录到控制台的响应是 api url。这是我尝试运行 ajax 调用后记录到控制台的示例。API_URL?building_number=0227&commodity_tag=S&meter=2032&train_start=2020-10-01&train_end=2021-09-29&analysis_start=2021-10-01&analysis_end=2021-10-31 我知道我只在控制台中返回 api url 的原因是因为我将 url 设置为变量 model 在控制器中,然后我只是返回该模型变量。如何设置控制器以从 API 返回实际数据?非常感谢任何建议!

    const modelApi = function () 
        const modelStart = $('.modelStart').val()
        const modelEnd = $('.modelEnd').val()
        const analysisStart = $('.analysisStart').val()
        const analysisEnd = $('.analysisEnd').val()

        $.ajax(
            url: '/gateway',
            method: 'GET',
            data: 
                buildingNumber: data[0][0].building_number,
                commodity: data[0][0].commodity_tag,
                meter: data[0][0].meter,
                trainStart: modelStart,
                trainEnd: modelEnd,
                analysisStart: analysisStart,
                analysisEnd: analysisEnd
            
        ).then(response => 
            console.log(response)
        )

【问题讨论】:

【参考方案1】:

只需使用 Axios 进行 API 调用

require('dotenv').config();
const axios = require('axios').default;
module.exports = 
    getModel: async (req, res) => 
        const  buildingNumber, commodity, meter, trainStart, trainEnd, analysisStart, analysisEnd  = req.query
        try 

            const model = `$process.env.API_URLbuilding_number=$buildingNumber&commodity_tag=$commodity&meter=$meter&train_start=$trainStart&train_end=$trainEnd&analysis_start=$analysisStart&analysis_end=$analysisEnd`
            const response = await axios.get(model)
            return res.json(response.data)

         catch (error) 
            console.error(error.message)
        
    


没有 jQuery 的 Fetch 调用 :)

const modelApi =  async () => 
  const modelStart = $('.modelStart').val()
  const modelEnd = $('.modelEnd').val()
  const analysisStart = $('.analysisStart').val()
  const analysisEnd = $('.analysisEnd').val()
  const res = await fetch('/gateway', 
  
    qs: 
    buildingNumber: buildingNumber, 
    commodity: commodity, 
    meter: meter, 
    trainStart: trainStart, 
    trainEnd: trainEnd, 
    analysisStart: analysisStart, 
    analysisEnd: analysisEnd
  ).json();
  console.log(res)

【讨论】:

我安装了 axios 并在控制器中需要它,但它说 Property 'get' does not exist on type 'typeof' 查看我更改的解决方案,我在导入 axios 时忘记添加 .default 啊谢谢没看到 让我知道它是否有效,请接受答案:) 它工作,刚刚接受了答案!感谢您的回复!

以上是关于如何使用服务器端 API 调用返回数据?的主要内容,如果未能解决你的问题,请参考以下文章

[技术博客] 如何在前端访问后端对象的更多数据

如何在没有服务器端代码的情况下使用 Web API,只使用 Ajax

在服务器端护照js本地用户身份验证后,如何在客户端使用cookie显示用户信息?

如何使用从 API 调用返回的 JSON 数据使 jquery 自动建议

Next.js 服务器端 api 调用返回 500 内部服务器错误

redux-saga api yield 调用有效,但没有返回数据