我正在使用 Plaid API 从注册用户那里收集交易数据。本质上,Plaid 需要检索我们的 webhook 端点的更新,以便让服务器知道何时可以提取数据。当所需的代码从 Plaid 发送到该端点时,我们将知道交易数据已准备好检索,我们的后端将开始将其插入到我们的数据库中。
我们遇到的问题是如何将数据发送到前端。由于我们只在数据准备好从网络钩子(Hook)端点上的 Plaid 中提取数据时收到警报,因此任何 res.send 都会转到 Plaid。如果我们有另一个端点来获取新插入的数据,用户将能够在 Webhook 操作发生之前点击该端点。
我们有点卡住了。我们可以让 webhook 触发我们需要触发的操作,但是一旦触发后将其发送回用户是另一个问题。在将数据发送回前端之前,有没有让我们的第三个端点等待第二个端点完成?
这是端点 1,它触发 Plaid 将他们的 webhook 发送到 out 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;
}),
);
}
这是端点 3,它是我们的 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 的问题?
最佳答案
我认为如果您在 Webhook 被触发时尝试推送到客户端 - 您可以:
res
来自端点一的对象(不确定如何将 Webhook 调用映射到初始请求)。一旦 Webhook 被触发,查找 res
对象并关闭初始请求。这不太理想。如果 Webhook 在初始请求套接字关闭之前未能触发,或者如果您需要扩展应用程序 - 它不会扩展,因为您将始终需要在引用打开套接字的同一应用程序中调用 Webhook。关于node.js - 如何将信息发送回前端,运行由 webhook 触发的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59996265/