我正在使用Plaid API收集已注册用户的交易数据。基本上,Plaid需要向我们的Webhook端点检索更新,以便让服务器知道何时可以拉取数据。当从Plaid发送所需代码到该端点时,我们将知道交易数据已准备好进行检索,后端将开始将其插入我们的数据库。
我们遇到的问题是如何将数据发送到前端。由于我们只能在Webhook端点上获得从Plaid获取数据的准备就绪通知,任何res.send都会被发送到Plaid。如果我们有另一个端点来获取新插入的数据,那么在Webhook操作发生之前,用户就可以访问它。
我们有些困惑。我们可以使Webhook触发我们需要触发的操作,但是一旦触发,将其发送回到用户那里是另一个问题。是否有任何方法可以使第三个端点在发送数据回前端之前等待第二个端点完成?
这是端点1,它会触发Plaid将其Webhook发送到我们的Webhook端点。
这是终端点2,出站 Webhook 终端点。首先,Plaid 发送一个带有对象的 POST 请求,我们会忽略该对象,因为 webhook_code 不是触发我们要运行操作的代码。第二个请求将通过以下条件。
我们遇到的问题是如何将数据发送到前端。由于我们只能在Webhook端点上获得从Plaid获取数据的准备就绪通知,任何res.send都会被发送到Plaid。如果我们有另一个端点来获取新插入的数据,那么在Webhook操作发生之前,用户就可以访问它。
我们有些困惑。我们可以使Webhook触发我们需要触发的操作,但是一旦触发,将其发送回到用户那里是另一个问题。是否有任何方法可以使第三个端点在发送数据回前端之前等待第二个端点完成?
这是端点1,它会触发Plaid将其Webhook发送到我们的Webhook端点。
router.post('/token_exchange', publicTokenExists, async (req, res) => {
const {publicToken} = req.body;
const {userid} = req.body;
try {
const {access_token} = await client.exchangePublicToken(publicToken);
const Accessid = await qs.add_A_Token(access_token, userid);
const {item} = await client.getItem(access_token);
const Itemid = await qs.add_An_Item(item.item_id, userid);
res.status(201).json({
accessCreated: Accessid,
ItemCreated:Itemid
});
} catch (err) {
console.log('access', err);
}
});
这是终端点2,出站 Webhook 终端点。首先,Plaid 发送一个带有对象的 POST 请求,我们会忽略该对象,因为 webhook_code 不是触发我们要运行操作的代码。第二个请求将通过以下条件。
router.post('/webhook', async (req,res)=>{
const body = req.body;
console.log("THE WEBHOOK BRUH",body)
if(body.webhook_code==="HISTORICAL TRANSACTIONS"){
const A_token = await qs.GetAccessTokenThatsConnectedTo(body.item_id)
const {transactions} = await client.getTransactions(A_token)
const done = Promise.all(
transactions.map(async trans => {
const contents = await qs.insert_transactions(trans);
return trans;
}),
);
}
这是第三个端点,它被用于React前端请求数据库的交易数据。
router.post('/transactions',checkAccessToken, async (req,res)=>{
console.log("the request body", req.body)
const access = req.body.access
try{
const {transactions} = await qs.getTransactionsDataBaseThatWeInsertedInFunctiontwo
(access,'2019-01-01','2019-01-30')
res.status(200).json({transactions})
}catch(err){
console.log(err)
res.status(500).json({message:"error sending transactions"})
}
})
我想我正在寻找以下解决方案:
是否可以在方法2完成后发送插入的交易数据?
是否可以使方法3等待方法2完成,我最初考虑将其作为中间件函数,但我认为这不会消除响应返回到Plaid而不是React的问题?