Передача данных из запроса в шаблоны руля? - PullRequest
0 голосов
/ 13 мая 2019

У меня есть несколько запросов, включая погоду (openweathermap.org), твиты (twitter.com) и фотографии (unsplash.com). Эти запросы работают, получают данные на консоль. Я использую экспресс-руль для отображения шаблонов. Я не знаю, как передать данные из запроса в шаблон. Отдельные значения, такие как String, Int, передаются, но информация из функций, содержащих запросы, не передается в шаблон. Я пытался отправить данные из запроса различными способами, но ничего не помогает. Что мне нужно сделать, чтобы получить данные из запроса и отправить данные в шаблон HandleBars?

С маршрутами все в порядке, все идет по мере необходимости, основная проблема - перенести данные из запроса в шаблон HandleBars.

unsplash.js

var request = require('request');

module.exports = {
    unsplash: function (town){
        request({url:'https://api.unsplash.com/search/photos?page=1&query=' + town +'&client_id=ab132a1b9b1c45a089418f5ae851b088260a08967b068620f340f6bf763ea196'}, function(err, res){
            if(err){
                console.log("Something with unsplash is wrong! Error: " + err.message);
            }else if(res){
                var search = JSON.parse(res.body);
                var array = new Array();
                search.results.forEach((e) => {
                    array.push(e.urls.raw);
                });
                console.log(array);
                return array;
            }
        })
    }
};

mainController.js

const express = require('express');
var router = express.Router();
var common1 = require('./unsplash');

router.get('/tokyo', (req, res) => { 
    res.render("hotel/mainPage", {
        viewTitle: "> TOKYO",
        array: common1.unsplash("tokyo")
    });
});

module.exports = router;

отель / mainPage.hbs

...
<body>
 {{viewTitle}} <-- it works
 {{array}} <-- did not work
 {{log array}} <-- In the console I get 'undefined'
</body>
...

server.js

const express = require('express');
const path = require('path');
const exphbs = require('express-handlebars');
const bodyparser = require('body-parser');
const Handlebars = require('handlebars');

var app = express();
app.use(bodyparser.urlencoded({
    extended: true
}));
app.use(bodyparser.json());

app.set('views', path.join(__dirname, '/views/'));

var common = require('./controllers/unsplash');

app.engine('hbs', exphbs({ extname: 'hbs', defaultLayout: 'mainLayout', layoutsDir: __dirname + '/views/layouts/'}));

app.set('view engine', 'hbs');

app.listen(3000, () => {
    console.log('Express server started at port : 3000');
});

Я ожидаю, что URL фотографии будут выглядеть как в консоли: ['https://images.unsplash.com/photo-1503899036084-c55cdd92da26?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjcwNTc0fQ', 'https://images.unsplash.com/photo-1502716197620-bf14ce1651b3?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjcwNTc0fQ']

Но фактический результат - ничто.

Если я наберу это таким образом: {{log array}} В консоли я получаю: не определен

...