使用我的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数据,因此我使用名为open-graph-scraper的模块
使用 data.js 我获得了整个JSON,并且它在路径 index.js 中可用data
然后我和通过选中博客列来处理此data
。如果匹配,我将值(博客网址)循环到open-graph-scraper模块。
这将为我提供每个博客网址的开放图表数据,如下面的示例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传递出去,并将它作为一个单独的对象放在渲染中,以便它可以作为两个独立的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)
}
})
}
答案 0 :(得分:1)
你遇到的问题是,如果你异步地执行getBlogData(并且你应该,你不希望客户端等待所有数据返回),那么当你获得数据时res.render会有已被召唤。由于您无法再次调用res.render,因此您会想到两个选项: