【发布时间】:2018-04-03 05:17:00
【问题描述】:
我正在从新闻网站上抓取文章。我已经成功抓取了文章,数据也顺利到达了前端。 (它的 console.log 是正确的)。我的问题是我无法使用按钮将数据呈现到页面上 - 数据仅在我刷新时才会填充页面。
我知道这个问题与 Handlebars 有关,因为如果我尝试使用 jQuery 渲染页面,它可以工作。
我相信这与我的路线有关。我通过 /articles 路由将数据发送到页面,但正如您所见,我并没有专门使用 res.render 或 res.redirect。我认为这就是为什么它不起作用?但是,我不知道如何解决它。我对路线和回调有点动摇。我是编码新手,但我向您保证,我已经研究并尝试了许多修复方法,但均无济于事。任何帮助或指导表示赞赏。谢谢你。
app.get("/", function(req, res) {
db.Article
.find({})
.then(function(dbArticle) {
// res.render("index");
res.render("index", { articles : dbArticle });
});
});
app.get("/scrape", function(req, res) {
axios.get("https://www.nytimes.com/section/technology?
action=click&pgtype=Homepage®ion=TopBar&module=HPMini
Nav&contentCollection=Tech&WT.nav=page")
.then(function(response) {
var $ = cheerio.load(response.data);
$("a.story-link").each(function(i, element) {
var results = {};
results.link = $(this).attr("href");
// console.log("This is my link " + results.link)
results.blurb = $(this).children().find(".summary").text();
// console.log("This is my blurb " + results.blurb)
results.headline = $(this).children().find(".headline").text();
// console.log("This is my headline " + results.headline)
db.Article
.create(results)
.then(function(dbArticle) {
res.json(dbArticle);
// res.end();
// console.log("YES", dbArticle);
})
.catch(function(err) {
res.json(err);
})
})
})
})
app.get("/articles", function(req, res) {
db.Article
.find({})
.then(function(dbArticle) {
res.json(dbArticle);
// console.log(dbArticle, "scraped")
})
.catch(function(err) {
res.json(err);
});
});`
【问题讨论】:
-
当您说“/articles route”时,您的意思是
/scrape?您是使用 AJAX 还是表单提交来调用此路由或...什么? -
我使用 /scrape 来抓取文章和 /articles 将数据库信息带到页面。我使用 $.getJSON 使用按钮(单击事件)调用此路由。
-
对不起,我的错误,我错过了你的代码示例的结尾。我不清楚你想做什么。如果您使用的是 AJAX 请求,那么通常您会返回 JSON 数据并使用 JavaScript 更新客户端中的页面。在服务器上使用
res.render(通常)用于生成 HTML,加载新页面。可以有一个中间立场,AJAX 请求返回一小段 HTML 以注入页面,但所有内容都需要专门编写以支持它。您尝试使用哪种方法?您能否详细说明“如果我尝试使用 jQuery 渲染页面,它可以工作”? -
我有一个 app.js 文件,它有这个点击事件: $('#show-articles').on("click", function (event) { event.preventDefault(); $.getJSON("/articles", function(data) { for (var i = 0; i
-
很抱歉,格式不正确。当我使用这个点击事件代码时,我可以在页面上看到“data[i].headline”文本(来自我的数据库和抓取的文章)。但是,我正在尝试使用 Handlebars。我似乎不知道如何使用 Handlebars 更新页面上的 html。
标签: javascript node.js express handlebars.js