gpt4 book ai didi

javascript - Express node.js - 请求 JSON,异步处理它

转载 作者:行者123 更新时间:2023-12-03 08:46:39 24 4
gpt4 key购买 nike

通过我的 node.js 应用程序,我从电子表格 API 获取 JSON 数据。它基本上返回以下 JSON。

{  
"status":200,
"success":true,
"result":[
{
"Dribbble":"a",
"Behance":"",
"Blog":"http://blog.invisionapp.com/reimagine-web-design-process/",
"Youtube":"",
"Vimeo":""
},
{
"Dribbble":"",
"Behance":"",
"Blog":"http://creative.mailchimp.com/paint-drips/?_ga=1.32574201.612462484.1431430487",
"Youtube":"",
"Vimeo":""
}
]
}

目前这只是一个虚拟数据,但可以肯定的是,我需要以不同的方式处理 Blog 下的值(博客 URL)。通过博客网址,我需要获取开放图谱数据,因此我使用名为 open-graph-scraper 的模块

使用data.js,我得到了整个JSON,并且它可以在路由index.js中作为data使用,然后我正在处理通过检查博客列来获取此数据。如果匹配,我将通过 open-graph-scraper 循环这些值(博客 URL)模块。

这将为我提供每个博客 URL 的开放图形数据,如以下示例 JSON。

{ 
data:
{ success: 'true',
ogImage: 'http://davidwalsh.name/wp-content/themes/punky/images/logo.png',
ogTitle: 'David Walsh - JavaScript, HTML5 Consultant',
ogUrl: 'http://davidwalsh.name/',
ogSiteName: 'David Walsh Blog',
ogDescription: 'David Walsh Blog features tutorials about MooTools, jQuery, Dojo, JavaScript, PHP, CSS, HTML5, MySQL, and more!' },
success: true
}

所以我的目标是将此博客 JSON 作为与主 JSON 分开的数据传递,并将其作为单独的对象放入渲染中,以便可以在 View 中作为两个单独的 JSON。但我不确定我的 getBlogData 方法是否正确。我什至不确定在路由器文件中处理这样的数据是否是一件好事。我希望得到一些指示。

index.js

var ogs = require('open-graph-scraper'); 
var data = require('../lib/data.js');

data( function(data) {

var getBlogData = function (callback) {

var blogURL = [];

if (data.length > 0) {

var columnsIn = data[0];

for(var key in columnsIn) {
if (key === 'Blog') {
for(var i = 0; i < data.length; i++) {
blogURL += data[i][key];
}
}
}
};

ogs({
url: blogURL
}, function(er, res) {
console.log(er, res);
callback(res);
});
}

getBlogData( function (blogData) {
//I want to make this blogData available in render below
but don't know how
});

router.get('/', function(req, res, next) {
res.render('index', {
title: 'Express',
data: data
});
});
});

data.js(我的获取 JSON 数据的模块)

module.exports = function(callback) {

var request = require("request")
var url = "http://sheetsu.com/apis/94dc0db4"

request({
url: url,
json: true
}, function (error, response, body) {

if (!error && response.statusCode === 200) {

var results = body["result"];
callback(results)

}
})

}

最佳答案

您将遇到的问题是,如果您异步执行 getBlogData (您应该这样做,您不希望客户端等待所有数据返回),那么当您获取数据时 res.render 将有已经被调用了。由于您无法再次调用 res.render,因此您想到了两个选项:

  1. 您可以从客户端查询个人博客数据。这将导致客户端和服务器之间进行更多的来回操作,但如果您的初始数据中有很多条目但只想显示少量条目,那么这是一个很好的策略。
  2. 您可以在检索数据时使用 Websocket 将数据发送到客户端。查找类似express.io 的网站,找到一种简单的方法来做到这一点。

关于javascript - Express node.js - 请求 JSON,异步处理它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32862605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com