2015-09-15 2 views
0

Я экспериментировал с nodejs/expressjs для нашего WebClient и у меня возникают проблемы с передачей данных в шаблон .ejs:Expressjs использовать тело запроса от REST Апи

У меня есть REST API вызов к нашему серверу приложений, который возвращает json. Я надеялся, что могу называть API непосредственно в маршрутизаторе и передавать его как переменную в мой шаблон, но я не могу получить извлечение элемента json. Я знаю, что я мог бы использовать вызов ajax непосредственно в шаблоне, но я хотел попробовать придерживаться шаблона MVC Design.

возвращение JSon элемента к локальной переменной, которую я затем передать, кажется, не работает по какой-то причине.

Я обыскивал интернет весь день, пытаясь найти ответ, но и во всех учебниках все, что я видел, это все только на входе их результат. Все хорошо и хорошо, но было бы неплохо что-то сделать с этим.

`

var url = "http://application.server" 

    /* GET home page. */ 
    router.get('/', function(req, res, next) { 

    request(url, function (error, response, body) { 
    console.log(body); //returns Json element, how can I extract this?? 
    }); 

    res.render('index', { 
    //data: body <---- I want to pass the JSON element to my template here 
    }); 

    }); 

`

спасибо !!!!

+0

Почему вы не вызываете 'res.render' в обратном вызове, который вы передаете' request() '? –

+0

Да, я не знаю, почему я просто не делал этого ..... Он отлично работает :) Думаю, мне нужно просто пойти домой на день. Спасибо, Фил! – localyost

ответ

0

@Phil Спасибо за вполне логичный ответ :)

Теперь я сделать свой шаблон в функции обратного вызова и разбора body на объект JSON с JSON.parse(body). Позже мне придется делать больше вызовов API и передавать их, но для нашего прототипа это работает.

var url = "http://application.server" 

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    request(url, function (error, response, body) { 
    res.render('index', {data:JSON.parse(body)}); 
    }); 
}); 
+0

Если вам нужно начать делать больше вызовов API, которые вы можете найти, используя библиотеку [async] (https://github.com/caolan/async) ('async.parallel') или обещав свои вызовы API и используя' Promise.all 'поможет, когда вам нужно объединить несколько асинхронных вызовов в один обратный вызов. –