Express项目API数据在index.ejs无法展示,控制台打印正常
解决NewsAPI数据在EJS文本区域无法正常展示的问题
问题核心在于你直接把API返回的整个对象传递给了EJS,对象无法通过<%= %>直接转成可读字符串显示,同时你之前尝试的content.articles.titles写法也有误(正确路径是content.articles数组中每个元素的title属性)。以下是具体修复步骤:
1. 修正后端数据传递逻辑
修改index.js的/apiKey路由,直接传递API返回的articles数组(这是新闻数据的实际载体),而非整个data对象:
import express from "express"; import axios from "axios"; const app = express(); const port = 3000; const urlAndKey = "https://newsapi.org/v2/everything?q=bitcoin&apiKey=7160918468a64df9a7bf26e5915c1f50"; app.get("/", (req, res) => { res.render("index.ejs", { newsText: "Your news will display here." }); }); app.get("/apiKey", async (req, res) => { try { const result = await axios.get(urlAndKey); console.log(result.data); // 传递articles数组给前端 res.render("index.ejs", { articles: result.data.articles }); } catch (error) { res.status(404).send(error.message); } }); app.listen(port, () => { console.log(`Server running on port: ${port}`); });
2. 修正EJS前端渲染逻辑
在index.ejs中遍历articles数组,把每篇新闻的关键信息(标题、来源、描述等)拼接成可读文本,填充到textarea里:
<div class="container col-7"> <div class="row"> <div class="col-4"> <a href="/apiKey" class="btn btn-primary pill-rounded">Get All The NEWs</a> </div> </div> <div class="col-8"> <div class="img-fluid text-center mt-5"> <textarea style="border: black; border-style: solid; width:530px; height:150px ;margin-top: 10px;" readonly> <% if (locals.articles && articles.length > 0) { %> <% articles.forEach((article, index) => { %> <%= index + 1 %>. <%= article.title %> 来源: <%= article.source.name %> 描述: <%= article.description %> ---------------------------------------- <% }) %> <% } else { %> <%= locals.newsText || "暂无新闻数据" %> <% } %> </textarea> </div> </div> </div>
修复说明
- 后端传递
articles数组后,前端可直接遍历每条新闻数据; - 通过
forEach循环格式化每篇新闻的序号、标题、来源、描述,确保textarea内容清晰可读; - 增加判断逻辑,无新闻数据时显示提示文本,避免页面空白或错误信息。
内容的提问来源于stack exchange,提问作者Techgorilla
相关产品推荐
相关产品推荐

