如何将Node.js从API抓取的数据填充到EJS模板并展示名称与价格
问题原因
fetchData是异步函数,直接调用会返回Promise实例而非实际接口数据,你没有等待异步请求完成就把Promise传给了EJS模板,所以页面会渲染[object Promise]。
第一步:修改index.js代码
你需要给路由处理函数加上async/await等待异步请求完成,同时提取axios返回结果里的实际接口数据:
const express = require("express"); const app = express(); const path = require("path"); const axios = require("axios").default; const cors = require("cors"); app.set("view engine", "ejs"); app.set("views", path.join(__dirname, "/views")); app.use( cors({ origin: "http://localhost:3000", }) ); const fetchData = async () => { const response = await axios.get( "https://nepse-data-api.herokuapp.com/data/todaysprice" ); // 直接返回接口实际返回的数组数据 return response.data; }; // 路由处理函数加async关键字 app.get("/", async (req, res) => { try { // 等待异步请求完成拿到实际数据 const nepseData = await fetchData(); res.render("home.ejs", { nepseData }); } catch (err) { // 错误处理,避免接口请求失败导致服务崩溃 console.error("请求数据失败:", err); res.render("home.ejs", { nepseData: [], error: "数据加载失败" }); } }); app.listen(3000, () => { console.log("listening to port 3000"); });
第二步:修改home.ejs代码
接口返回的是数组格式的数据,你可以通过循环遍历渲染每一项的名称和价格字段(示例假设名称字段为companyName,价格字段为closingPrice,你可以根据API实际返回的字段名替换):
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style> table { border-collapse: collapse; width: 80%; margin: 20px auto; } th, td { border: 1px solid #ddd; padding: 8px; text-align: left; } th { background-color: #f2f2f2; } </style> </head> <body> <% if (error) { %> <p style="color: red; text-align: center;"><%= error %></p> <% } else { %> <table> <thead> <tr> <th>股票名称</th> <th>收盘价格</th> </tr> </thead> <tbody> <% for(let item of nepseData) { %> <tr> <td><%= item.companyName %></td> <!-- 替换为实际的价格字段名即可 --> <td><%= item.closingPrice %></td> </tr> <% } %> </tbody> </table> <% } %> </body> </html>
字段调整说明
如果实际API返回的名称、价格字段和示例不一致,只需要替换item.companyName和item.closingPrice为实际字段名即可正常渲染。
内容的提问来源于stack exchange,提问作者Rosan Paudel
相关产品推荐
相关产品推荐

