Асинхронные вложенные обратные вызовы с использованием модуля узла Express + Request в структуре MVC

Я борюсь с тем, что похоже на последний шаг в передаче некоторых данных из файла модели обратно в контроллер с помощью Node Request.

Я успешно настроил обратный вызов из моего файла модели, который использует запрос для загрузки JSON из внешнего источника.

Мой контроллер может получить доступ к этому, но я думаю, что мне все еще нужен какой-то вложенный второй обратный вызов на последнем этапе, так как я хочу, чтобы переменная pageJSON содержала объект JSON и не могла понять, как именно.

Думайте, что я ударил немного кирпичной стены этим, и некоторые свежие взгляды на проблему были бы оценены! Мне кажется, что на данный момент я упускаю что-то очень простое (надеюсь!)

Файл моей модели:

module.exports = function (config, callback) {
  const request = require('request');
  const options = {
    'url' :  config.urls.page,
    'json' : true,
    'auth': {
      'user': config.auth.username,
      'pass': config.auth.password
    }
  };

  request(options, (error, response, body) => {
    if (error) {
      console.log(error);
    }
    callback(body);
  });
}

Мой файл контроллера:

const express = require('express');
const router = express.Router();
const app = express();
const config = require('../config');
const page = require('../models/page');

let pageJSON = page(config, (json) => {
  console.log(json); // This shows the JSON structure in console
  return json;
});

console.log(pageJSON); // Undefined

// Manipulate JSON and pass request view accordingly using Express

1 ответ

Решение

Вам придется иметь дело с json-манипуляциями в вашем обратном вызове контроллера (или вызвать другой обратный вызов из него):

let pageJSON = page(config, (json) => {
   console.log(json); // This shows the JSON structure in console
   processJSON(json);
});

pageJSON является undefined потому что ничего не возвращается из вашей модели.

Другие вопросы по тегам