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



我正试图在我的后端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设置为变量模型,然后我只返回该模型变量。如何设置控制器以从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)
})

只需使用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_URL}building_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的提取调用:(

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)
}

最新更新