Javascript 如何分配返回数据对象,以便在视图中呈现它(node.js)

Javascript 如何分配返回数据对象,以便在视图中呈现它(node.js),javascript,json,node.js,Javascript,Json,Node.js,我有以下代码,我基本上是向我的api发出请求,以检索JSON数据并导出这个自定义模块 问题在于,var data=require('./lib/data.js')一项,数据实际上并没有我期望的数据 如果它是项目中的一个物理JSON文件,我可以执行var data=require('./data.JSON')

我有以下代码,我基本上是向我的api发出请求,以检索JSON数据并导出这个自定义模块

问题在于,
var data=require('./lib/data.js')一项,数据实际上并没有我期望的数据

如果它是项目中的一个物理JSON文件,我可以执行
var data=require('./data.JSON')
这里怎么了

data.js(获取JSON数据的自定义模块)

index.js

var express = require('express');
var router = express.Router();

var data = require('./lib/data.js');

router.get('/', function(req, res, next) {
  res.render('index', { 
    title: 'Express' 
    data: data
  });
});

module.exports = router;
module.exports = function(callback) {

    var request = require("request")
    var url = "http://sheetsu.com/apis/94dc0db4"

    request({ url: url, json: true }, function (error, response, body) {
        if (!error && response.statusCode === 200) {
            callback( body );
        }
    });
}
var express = require('express');
var router = express.Router();

var data = require('./lib/data.js');

data( function(data) {

    router.get('/', function(req, res, next) {

        res.render('index', { title: 'Express', data: data });

    });
});

module.exports = router;

这里有两件事需要考虑:

  • 您对服务器的请求是异步的
  • 您实际上没有将数据返回到
    模块。导出
  • 代码中的一些基本语法错误
  • 试试这个:

    data.js

    var express = require('express');
    var router = express.Router();
    
    var data = require('./lib/data.js');
    
    router.get('/', function(req, res, next) {
      res.render('index', { 
        title: 'Express' 
        data: data
      });
    });
    
    module.exports = router;
    
    module.exports = function(callback) {
    
        var request = require("request")
        var url = "http://sheetsu.com/apis/94dc0db4"
    
        request({ url: url, json: true }, function (error, response, body) {
            if (!error && response.statusCode === 200) {
                callback( body );
            }
        });
    }
    
    var express = require('express');
    var router = express.Router();
    
    var data = require('./lib/data.js');
    
    data( function(data) {
    
        router.get('/', function(req, res, next) {
    
            res.render('index', { title: 'Express', data: data });
    
        });
    });
    
    module.exports = router;
    
    index.js

    var express = require('express');
    var router = express.Router();
    
    var data = require('./lib/data.js');
    
    router.get('/', function(req, res, next) {
      res.render('index', { 
        title: 'Express' 
        data: data
      });
    });
    
    module.exports = router;
    
    module.exports = function(callback) {
    
        var request = require("request")
        var url = "http://sheetsu.com/apis/94dc0db4"
    
        request({ url: url, json: true }, function (error, response, body) {
            if (!error && response.statusCode === 200) {
                callback( body );
            }
        });
    }
    
    var express = require('express');
    var router = express.Router();
    
    var data = require('./lib/data.js');
    
    data( function(data) {
    
        router.get('/', function(req, res, next) {
    
            res.render('index', { title: 'Express', data: data });
    
        });
    });
    
    module.exports = router;
    
    更详细一点;获取JSON数据的请求将不同步。这意味着它可以花费任何时间来响应数据,因此它允许您的程序完成其当前线程。这意味着当您的
    index.js
    文件接收到
    data.js
    模块时,数据可能尚未到达。您可以阅读有关异步与同步的更多信息

    我们如何回避这个问题?我们传递方法a
    callback
    函数,以便在它完成时执行

    当我们执行模块时

    data( function(data) { ...
    
    …我们将向它传递一个函数,以便在它从服务器接收数据时运行。如果服务器没有错误且
    statusCode
    正常

    if (!error && response.statusCode === 200) { ...
    
    。。。然后我们调用已传递的
    回调
    函数,将
    主体
    (或数据,如果愿意)作为参数传递

    callback( body );
    
    …然后我们可以在我们的
    index.js
    中使用它

    res.render('index', { title: 'Express', data: data });
    

    我的应用程序在'router.get('/',function(req,res,next)上出现语法错误时崩溃{`@SeongLee抱歉,我忘记了一个字符。我已经更新了答案。不确定是什么打字错误。我的应用程序仍然崩溃…/routes/index.js:12 data:data^^^^^ syntaxer:意外identifier@SeongLee第12行为您提供了什么?您确定需要我编写的
    data.js
    文件吗?