在MVC结构中使用Express + Request节点模块的异步嵌套回调

时间:2017-10-12 12:03:43

标签: javascript node.js express model-view-controller node-request

我正在努力解决使用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 个答案:

答案 0 :(得分:2)

你必须在你的控制器回调中处理json操作(或者从它调用另一个回调):

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

pageJSONundefined,因为您的模型未返回任何内容。