Как реализовать асинхронность для переменных и экспортировать их на другой маршрутизатор? - PullRequest
0 голосов
/ 05 сентября 2018

Я действительно изо всех сил пытаюсь передать переменные другому маршрутизатору. А затем передать их .pug. Я получаю неопределенный при попытке использовать их в 3.js. Я знаю, что должен использовать обратный вызов и часами обходил несколько ресурсов, но не смог решить.

1.js

// normal setup
app.use(require('../routes/2').router);
app.use(require('../routes/3').router);
// server listen

2.js

const router = require('express').Router();
var fetch = require('fetch-retry');
let restcountries = require('rest-countries-node');
restcountries = new restcountries;

let data_fsq = {};
let elements = {};

restcountries.getAll()
    .then(data => {
        router.get('/data', function (req, res) {
            res.json(data);
        });
        elements = data; // use this variable in 2.js
        for (let element in data) {
            http = `www.url,com`;               
            fetch(http, {
                retries: 1
            })
            .then(res => {
                if (res.ok) {
                    return res.json();
                } else {
                    throw new Error('err');
                }
            })
            .then(body => {
                data_fsq[data[element].id] = body.items;
                router.get(`/api/data/${i}`, function (req, res) {
                    res.json(body);
                });
            })
            .catch((error) => {
                console.log('error loading the data for: '+data_fsq[element].name);
            });
    }
});

module.exports = {
    router: router,
    data_fsq: data_fsq, // undefined
    elements: elements //undefined
}

3.js

var data_fsq = require('./load').data_fsq;
var elements = require('./load').elements;
const path = require('path');
const router = require('express').Router();

router.post('/element/data', function (req, res) {
    index = req.body.index;

});

router.get('/main', function (req, res) {
    res.render(path.join(__dirname, '../client/main'){
        data_fsq: data_fsq[index], // undefined
        elements: elements[index] // undefined
    })
});

module.exports = router;
...