Javascript 如何分配返回数据对象,以便在视图中呈现它(node.js)
我有以下代码,我基本上是向我的api发出请求,以检索JSON数据并导出这个自定义模块 问题在于,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')
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
模块时,数据可能尚未到达。您可以阅读有关异步与同步的更多信息
我们如何回避这个问题?我们传递方法acallback
函数,以便在它完成时执行
当我们执行模块时
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
文件吗?