我需要从API1获取“ data”:3的值,并在API2中检查“ data”字段的值是否大于或等于3。我需要使用仅通过过滤器的API2字段创建新的API条件,请检查所需的Json:
Json:
[
{
"fieldid": "0001",
"data": 3 , ---- API 1
"field7": "2018-12-06T11:49:52.389Z"
},
[
{
"field1": "E004",
"data": 3, --- api 2
"field7": "2018-12-06T11:49:52.389Z"
},
{
"field1": "E005",
"data": 2, ---- api 2
"field7": "2018-12-06T11:49:52.389Z"
}
],
]
功能:
n getlistofStaffs(req, callback) {
log.info(path.basename(module.filename), "List Staffs :: getlistofStaffs()");
var listofStaffsAPI = api url;
const requestOptions = {
url: listofStaffsAPI,
json: true
};
request(requestOptions, function (err, res, body) {
if (err) {
return callback(true, null);
} else if (res.statusCode == 200) {
var clearancesstaff=body[0].clearanceLevel;
var staffClearanceId = body[0].staffClearanceId;
return callback(null, {staffClearanceId:body[0].staffClearanceId,clearancesstaff:body[0].clearanceLevel});
}
});
}
所需的输出JSON:
[ {
"fieldid": "0001",
"data": 3 ,
"field7": "2018-12-06T11:49:52.389Z"
}
]
谢谢
答案 0 :(得分:0)
由于使用的是异步库,因此需要使用.waterfall()
方法,该方法将回调数据从一个回调传递到下一个函数的输入。由于我不确定您现有功能的用途,因此我将展示我认为对您要执行的操作必不可少的签名,但细节由您自己决定。
function getListofStaffs(req, callback) {}
function getListofEvents(req, fieldname, callback) {}
// later
module.exports = (req, res, next) => {
async.waterfall([
getListofStaffs.bind(null, req),
getListofEvents.bind(null, req)
], (err, results) => {
if (err) return next(err);
return res.send(results);
});
}
如果能够做到,那么如果您能够使用节点的最后几个版本中可用的异步/等待功能,遵循代码可能会更容易一些。如果可以的话,只需确保您的API调用返回Promises,然后就可以执行以下操作:
async function getListofStaffs(req) {}
async function getListofEvents(req, fieldname) {}
module.exports = async (req, res, next) => {
try {
const fieldname = await getListofStaffs(req);
const events = await getListofEvents(req, fieldname);
res.send({ fieldname, events });
} catch (err) {
return next(err);
}
}
如果您不想在路线中尝试try..catch块,也可以使用asynchandler模块。
编辑
如我的评论中所述,您需要根据当前设计更新getListofEvents函数以期望三个参数:
function getlistofEvents(req, clearanceData, callback) {
var dt = dateTime.create();
var formatted = dt.format('Y-m-d');
console.log(formatted);
console.log(clearanceData);
log.info(path.basename(module.filename), "List Events :: getlistofEvents()");
var listofEventsAPI = www.gmail.com;
const requestOptions = {
url: listofEventsAPI,
json: true
};
request(requestOptions, function (err, res, result) {
if (err) {
return callback(true, null);
} else if (res.statusCode == 200) {
return callback(null, result);
}
});
}
当然,您的示例代码实际上并未使用该数据,因此我添加了console.log以显示该数据。