我正在嘗試在我的后端 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)
})
uj5u.com熱心網友回復:
直接用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)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/357516.html
標籤:javascript 节点.js 阿贾克斯 接口
