Express.js - 使用嵌套请求从备份URL获取JSON

时间:2017-04-11 11:30:37

标签: javascript json node.js express npm-request

我有两个网址有.json.gz个文件 -

var url = "http://post.s3post.cf/s3posts.json.gz";
var backupURL = "https://s3-us-west-2.amazonaws.com/s3post.cf/s3posts.json.gz";

我能够成功使用请求模块从文件中获取json -

app.all('*', function(req, res, next) {
    request({
        method: 'GET',
        uri: url,
        gzip: true
    }, function(error, response, body) {
        res.locals.posts = JSON.parse(body);
        next();
    });
});

我想要做的是,如果url的请求失败,我想使用backupURL来获取json。从逻辑上讲,我认为如果收到错误,我会使用嵌套请求来执行此操作 -

app.all('*', function(req, res, next) {
    request({
        method: 'GET',
        uri: url,
        gzip: true
    }, function(error, response, body) {
        if(error) {
            request({
                method: 'GET',
                uri: backupURL,
                gzip: true
            }, function(error, response, body) {
                res.locals.posts = JSON.parse(body);
                next();
            });
        } else {
            res.locals.posts = JSON.parse(body);
            next();
        }
    });
});

这不起作用。单独地,两个URL都可以使用一个请求。当backupURL的请求失败时,如何使用url

编辑1 -

程序编译并开始收听我的应用程序。当我请求页面崩溃时出现此错误 -

undefined:1
<?xml version="1.0" encoding="UTF-8"?>
^

SyntaxError: Unexpected token < in JSON at position 0
    at JSON.parse (<anonymous>)
    at Request._callback (/Users/Anish/Workspace/NodeJS/unzipper/app.js:65:28)
    at Request.self.callback (/Users/Anish/Workspace/NodeJS/unzipper/node_modules/request/request.js:188:22)
    at emitTwo (events.js:106:13)
    at Request.emit (events.js:194:7)
    at Request.<anonymous> (/Users/Anish/Workspace/NodeJS/unzipper/node_modules/request/request.js:1171:10)
    at emitOne (events.js:96:13)
    at Request.emit (events.js:191:7)
    at IncomingMessage.<anonymous> (/Users/Anish/Workspace/NodeJS/unzipper/node_modules/request/request.js:1091:12)
    at Object.onceWrapper (events.js:293:19)

2 个答案:

答案 0 :(得分:1)

尝试使用response.status  如果它是200然后进一步移动  否则,如果400或500然后使用备份URL

答案 1 :(得分:1)

  

它的解析错误。

<您似乎获得了HTML数据,并且在第一个位置您正在解析错误

在解析之前始终检查您的身体

if(typeof body==='string'){
   body = JSON.parse(body);
}
res.locals.posts = body;