如何在Node.js/Express中从URL获取JSON对象

3

首先声明,我是一名初学者,这是我第一次在真实项目中使用Node.js和Express。

我有一个简单的Node.js/Express项目,我想从一个URL读取JSON对象。之后,我打算构建另一个URL,使用iframe显示外部网站的HTML内容。

我在网上了解到'request'模块,并知道我需要进行如下操作:

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

// Urls for App Center REST functions
var url = 'https://someserver.com/appserver/portal/api/1.0/results/recent';

/* GET list of recent reports */
router.get('/testapi', function(req, res, next) {
  res.render('testapi', { title: 'List Recent Reports' });
});

/* TEST: function to GET report list */
router.get('/recentreports', function(req, res){
  request({
    url: url,
    json: true
  }, function (error, response, body) {
      if (!error && response.statusCode === 200) {
        console.log(body) // Print the json response
    }
  })
});

我尝试定义一个名为/recentreports的函数,并在testapi.jade视图中调用它,但是当我加载页面时控制台中没有任何输出,我怀疑我做错了什么。

我的问题是:

  1. 我该如何将JSON读取到我的应用程序中,并将此代码放到哪里(index.js、app.js、testview.jade等)?

  2. 我该如何从不管那个代码存在的地方导出构建的URL到我的.jade视图中?


你说的“将JSON读入我的应用程序”和“如何导出我从哪里构建的URL”的意思是什么? - peteb
1个回答

1
由于服务器没有发送任何响应,因此浏览器控制台中没有记录任何内容。响应仅在服务器控制台中记录。
您需要重构“recentreports”路由的代码以发送数据。您可以使用简单的“res.send”调用:
...
function (error, response, body) {
  if (!error && response.statusCode === 200) {
    res.send(body) // Send the response to the client
  }
}
...

这个响应将通过 AJAX 调用路由为 '/recentreports' 的接口,被 testapi.jade 文件接收。可以在 Javascript 文件中定义 AJAX 调用,并作为 testapi.jade 文件的来源之一。
构建的 URL 不需要导出,因为它存在于同一个 testapi.jade 文件中(在你从 AJAX 调用结果中生成它之后)。

1
我现在明白了,所以我的JSON已经在客户端应用程序中,可以在那里处理我的业务逻辑。有道理。我将不得不尝试使用AJAX - 对这种东西还很陌生。您有关于node / express的此类信息的推荐链接吗? - Sledge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接