首页 文章

无法读取未定义的属性'charge' ...带有Angular和Nodejs问题的条带检出

提问于
浏览
0

我正在我的网络应用程序中集成Stripe结帐 . 我已经在角度前端实现了Stripe checkout,并且还创建了一个后端,该后端应该接收条带检出传递的令牌 . 我收到一个未定义值'charge'的错误,这是我为事务创建的模型 . 我在这里错过了什么来正确传递令牌?

这是我得到的确切错误 . navabar.component.ts是我的结账方法 .

TypeError: Cannot read property 'charge' of undefined
    at TokenCallback.token [as fn] (navbar.component.ts:104)
    at TokenCallback.trigger (checkout.js:3)
    at TokenCallback.trigger (checkout.js:3)

这是我的表单调用的checkout方法 .

openCheckout() {
    let total = (this.donation * 100);
    let handler = (<any>window).StripeCheckout.configure({
      key: 'key_test',
      locale: 'auto',
      token: function (token: any) {
        const transaction = new Charge(total, token.id);
        console.log('From navbar nonObject ' + token.id + ' ' + total);
        console.log(transaction + ' From navbar');
        this.keyService.charge(transaction);
      }
    });
    handler.open({
      name: 'Delaware March for Jesus',
      description: 'Donation',
      amount: total
    });
    this.donation = 0;
    this.donationEmail = '';
  }

这是我的服务代码,它实现了收费并将令牌传递给后端 .

charge(transaction) {
    const body = JSON.stringify(transaction);
    const headers = new Headers();
    headers.append('Content-type', 'application/json');
      return this.http.post(this.keysUrlDev + '/charge', body, { headers: headers })
          .map((response: Response) => response.json())
          .catch((error: Response) => Observable.throw(error.json()));
  }

我为交易构建的简单角度模型 .

export class Charge {
  constructor(public amount: number,
              public token: string) {}
}

我在nodejs上的POST路由获取令牌并将其传递给条带库charge.create方法 .

router.post('/charge', function(req, res, next) {
  var amount = req.body.amount;
  var token = req.body.token;
  stripe.charges.create({
    amount: amount,
    currency: 'usd',
    description: 'Delaware March For Jesus Donation',
    source: token
  }, function(err, charge) {
    if (err) {
      console.log(req.body.amount + ' From POST' + req.body.token);
      return res.status(500).json({
        title: 'An error occured',
        error: err
      });
    }
    res.status(201).json({
      message: 'Charged successfully',
      obj: charge
    });
  });
});

我已经google了,并试图调试,但无法使代码正常工作 . 谁能确定我做错了什么?

我还要注意,所有变量都被正确定义为'keysUrlDev'等 . 实时和测试密钥都正确地放在前端的checkout方法中,后端的密钥是条带库 .

***错误是由于错误的上下文 . 见下面的答案 .

1 回答

  • 0

    问题在于:

    let handler = (<any>window).StripeCheckout.configure({
          key: 'key_test',
          locale: 'auto',
          token: function (token: any) {
            const transaction = new Charge(total, token.id);
            console.log('From navbar nonObject ' + token.id + ' ' + total);
            console.log(transaction + ' From navbar');
            this.keyService.charge(transaction); // The issue is here!
          }
        });
    

    您遇到的问题是您尝试在错误的上下文中访问“this”关键字 . 您在此方案中访问的“this”是token()函数的“this”上下文,而不是组件本身的上下文 . 使用箭头函数(()=> {})将适当的上下文绑定到函数 .

相关问题