javascript - Angular POST 路由未连接到 Nodejs 以进行 Stripe 集成

标签 javascript node.js angular http

我正在将 Stripe 结帐集成到我的网络应用程序中。我已经在 Angular 前端实现了 Stripe checkout,并且还创建了一个后端,该后端应该接收 stripe checkout 传递的 token 。提交 strip 结帐表单后,我的 POST http 请求不会将数据传递到后端。尽管我从 Stripe 获得了 200 状态,但我的 Nodejs 没有得到任何响应。

这是我通过表单调用的结帐方法。

 openCheckout() {
    let total = (this.donation * 100);
    let handler = (<any>window).StripeCheckout.configure({
      key: 'key_test',
      locale: 'auto',
      token: (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 = '';
  }

这是我的服务代码,用于实现收费并将 token 传递到后端。

charge(transaction: Charge) {
    const body = JSON.stringify(transaction);
    const headers = new Headers({'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()));
  }

我为交易构建的简单 Angular 模型。

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

我在 nodejs 上的 POST 路由获取 token 并将其通过 stripe 库 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
    });
  });
});

我已从前端获取 token 并通过 Postman 成功发送 POST 请求。它记录了成功的交易并将其显示在我的 Stripe 帐户中。但是,通过 Angular 发送请求时,这些都不会发生。

我使用 console.log 来跟踪代码停止的位置,并且可以在 keyService 收费方法中检索 token 和金额。所以肯定是http.post没有正常工作。

最佳答案

我遇到了几乎完全相同的相同类型的问题,而使这项工作对我有用的更改是删除 InMemoryWebApiModule.forRoot(InMemoryDataService),并将 API 作为简单的剪切和粘贴构建到我的 Express 后端中。 (我最初使用 Angular 'Heroes' 教程,内存中 API 就是在那里实现的。)

如果我广泛地理解这个问题,那就是这个内存中的 API 接管了 Angular 的 HTTP 的常规功能。一旦发布,它就再次正常运行 - 尽管我无法在技术上更具体。

我希望它也适合你。

关于javascript - Angular POST 路由未连接到 Nodejs 以进行 Stripe 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44059252/

相关文章:

javascript - 使用 window.print() 打印边框

javascript - Reactjs map 和使用API​​的问题,浏览器没有显示任何内容

javascript - 为 armv7 编译 node.js v0.10.31 时出错

javascript - Material-ui V3 在获取数据(或页面加载)后不会加载第一个选项卡

javascript - 使用 Node.js,如何要求用户确认覆盖文件?

javascript - 如何在javascript中动态转换诸如 "select::-ms-expand"之类的css?

javascript - Node.js - 将数据发送到 Node.js 并以 HTML 形式验证插入的数据

javascript - 子路由作为 Angular 主路由上的默认路由

angularjs - 从 Angular 1 传递函数以降级 Angular 2 组件

angular - 使用 Angular 异步管道以完全响应式(Reactive)方式刷新数据