如何使用服务器端 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 自动建议