С моим приложением node.js я получаю данные JSON из API таблиц. Он в основном возвращает JSON следующего.Express node.js - запрос 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":""
}
]
}
Это просто фиктивные данные сейчас, но одна вещь наверняка, что, мне нужно обрабатывать значения (блог URL) под блог по-разному. С URL блога, мне нужно, чтобы получить открытые данные Graph поэтому я использую модуль под названием open-graph-scraper
С data.js Я получаю всю JSON и он доступен в маршруте index.js в data
Затем я обрабатываю этот data
, проверяя столбцы блога. Если это совпадение, я перебираю значения (URL-адреса блога) через модуль open-graph-scraper.
Это даст мне открытые данные графика каждого 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 и поместить его в визуализации как отдельный объект так что имеется ввиду, как два отдельных 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)
}
})
}
Я рад, что вы поняли мой вопрос. Ваш вариант 1 кажется более выполнимым для моего уровня мастерства, но он будет включать функцию обратного вызова в представлении и внутри обратного вызова, мне нужно будет разобрать JSON и связать с HTML, верно? –
Вам нужно будет добавить новый маршрут, чтобы выразить res.send данные блога. Вам нужно добавить Javascript на свою страницу, чтобы выполнить запросы и разобрать JSON. Вы можете сделать это с помощью XMLHttpRequest (который поддерживает JSON, несмотря на имя) и JSON.parse, или если вы используете что-то вроде Angular или JQuery, вы можете использовать их и сделать вашу жизнь немного легче. – piemonkey
Итак, в этом маршруте я использую send, а не render, и потому что он не использует render, мне нужно сделать запрос на получение этого отправленного JSON. Верный? –