将数据从Zapier身份验证传输到触发器

时间:2018-04-04 08:49:45

标签: node.js zapier

我正在开发一个Zapier应用程序,并且在身份验证期间检索我需要在触发器中使用的租户ID(整数)。这样做的正确方法是什么?

我尝试过使用global,bundle.authData并将数据存储在模块中,但似乎没有任何工作能够保持一致。最好的情况是我将数据存储在全局中,但它是不一致的,在六次调用触发器中,租户id可能只有两次有效,另外四次它将作为undefined返回。

在全局的情况下,我在身份验证期间写入数据:

const test = (z, bundle) => {

  return z.request({
      url: URL_PATH + ':' + URL_PORT + '/v1/auth',
      params: {
          username: bundle.authData.username,
          password: bundle.authData.password
      }
  }).then((response) => {
    if (response.status === 401) {
      throw new Error('The username and/or password you supplied is incorrect.');
    } else {
      global.GLOBAL_tenant = response.json.tenant;
      // ...
    }
}

然后尝试在触发器中读回数据:

const processTransactions = (z, bundle) => {

  let jsonAll = [];
  let tenant  = global.GLOBAL_tenant;

  return new Promise( (resolve, reject) => {
    (function loop() {
    // ...

我也尝试将数据添加到'bundle.authData',这是Zapier在我联系他们时提出的建议,但我在身份验证期间添加了租户ID:

bundle.authData.tenant = response.json.tenant

当我尝试在触发器中检索它时不可用。仅存在“用户名”和“密码”。

我是Zapier和node.js的新手,所以任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

请使用类似bundle.authData.tenant = response.json.tenant的内容,而不是返回tenant = response.json.tenant之类的完全限定名称,并且此语句最好应包含在return语句中。 Zapier会自动应用bundle.authData限定符。

应避免使用

global个变量。希望这会有所帮助。

答案 1 :(得分:0)

David来自Zapier平台团队。

global无法正常工作,因为您的代码在多个lambda执行中运行,并且状态不存储在它们之间。此外,全球意味着它对所有用户都是一样的,这可能不是你想要的。

相反,我会查看session auth,这样您就可以在测试期间通过创建计算字段并从sessionConfig.perform返回值来存储额外字段。然后它将存储在auth对象中,旁边是用户名和密码。

另外,您可能需要考虑processTransactions中的任何代码。要么你可以全部归还它们,它们会在我们的最后重复,或者你做了一堆更好的dehydrated额外计算。这只是我的一个猜测,所以请随意忽略这一部分。