Express.js - 使用嵌套请求从备份 URL 中获取 JSON
Express.js - Use nested request to get JSON from backup URL
我有两个具有 .json.gz
文件的 URL -
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 都处理一个请求。当 url
请求失败时,如何使用 backupURL
?
编辑 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)
尝试使用response.status
如果它是 200 然后进一步移动
否则,如果它是 400 或 500,则使用备份 URL
It's parsing error.
<
您似乎正在获取 HTML
数据,但在第一个位置您遇到了解析错误
总是在解析前检查你的body
if(typeof body==='string'){
body = JSON.parse(body);
}
res.locals.posts = body;
我有两个具有 .json.gz
文件的 URL -
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 都处理一个请求。当 url
请求失败时,如何使用 backupURL
?
编辑 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)
尝试使用response.status 如果它是 200 然后进一步移动 否则,如果它是 400 或 500,则使用备份 URL
It's parsing error.
<
您似乎正在获取 HTML
数据,但在第一个位置您遇到了解析错误
总是在解析前检查你的body
if(typeof body==='string'){
body = JSON.parse(body);
}
res.locals.posts = body;