【问题标题】:Accept POST request from other website to Angular Application接受来自其他网站的 POST 请求到 Angular 应用程序
【发布时间】:2019-10-31 12:42:15
【问题描述】:

我想接受来自其他应用程序对我的 Angular 应用程序的发布请求。

基本上,他们会将客户 ID 列表作为 POST 有效负载发送,我必须在我的 Angular 应用程序中处理它并渲染 GUI。

我尝试在 app.js 中遵循 app.post 方法,但它抛出错误“无法执行 POST”

app.post('/customer', function (req, res) {
    console.log(req.body);
});

这是一个有点尴尬的要求,因为 Angular 是 JavaScript 框架,它不接受 post 请求,因为 post 请求需要在服务器端处理,而不是在客户端。

但是是否有任何解决方法,例如在 Node JS 中接受发布请求并发送到 Angular 应用程序并渲染 UI?可能是一个愚蠢的想法,所以至少需要一些想法或解决方法。

编辑:= 更多信息

我有 Node JS 应用程序,主要是通过 socket.io 获取实时数据。

【问题讨论】:

  • 所以你有一个服务器端、节点或类似的东西?节点服务器可以毫无问题地接收请求并保存/存储它,并且您的 Angular 应用程序会经常轮询以查看数据是否存在。或者 websockets/socketIO 可以将数据从服务器推送到应用程序。
  • 我有将数据推送到 Angular 应用程序的节点 js 应用程序。我得到了您在节点中接收发布数据的想法,但是如何将这些数据推送到我的 Angular 应用程序?超过 3k 的用户将发布请求,因此如何确定我需要向哪个客户推送数据。在一篇文章中,他们希望 GUI 作为回应。不知道如何实现。

标签: node.js angular


【解决方案1】:

鉴于 Angular 是一种前端技术,接收 post 请求几乎是不可能的。这是因为 Angular 默认会创建一个服务器并在 'ng serve' 上运行它,而你可能真的无权访问该服务器。

但是,在部署应用程序时,您可能需要创建自己的服务器(例如,在部署到 heroku 时)。 创建 server.js 文件时,您可以处理来自服务器文件的各种 api 调用。

然而,这样做的问题是,这些请求将无法在本地计算机上运行,​​因为您刚刚创建的服务器无法在 localhost 上运行。

const PORT = process.env.PORT || 8905;
const path = require('path');
const express = require('express');
const forceSsl = require('force-ssl-heroku');
const app = express();

app.use(forceSsl);
app.use(express.static(__dirname + '/dist/fenix-school'));
app.use(express.json());

app.post('/payment/success', (request, response) => {
  response.json(request.body)
});

app.get('*', (request, response) => {
  console.log('route hit');
  response.sendFile(path.join(__dirname + '/dist/fenix
 school/index.html'));
});

app.listen(PORT, () => console.log(PORT));

在这里,我创建了一个服务器,并让它通过返回请求正文来处理发布请求

另一方面,这是使用邮递员的发帖请求,并且可以正常工作(我在截屏之前清除了网址)

【讨论】:

    【解决方案2】:

    您需要使用 Angular 通用。这里是官方指南Angular universal app

    然后在文件server.ts中

    您可以通过添加来接受盆栽请求。

     server.post('/customer', (req, res) => {
             console.log(req.body);
    
     });
    

    如果你想得到身体,你可以检查那些 answers.

    【讨论】:

      【解决方案3】:

      嗯,Angular 是前端框架。您不能接受来自 angualar 的 POST 请求。但是您可以通过使用任何服务器端服务(如 nodejs 或 java)来实现这一点。 你也可以使用 nodejs。 1.使用express或nodejs中的任何其他框架创建服务器端。 2. 然后您的客户必须将他们的客户 ID 或其他数据发布到该服务器上。 3.使用mongodb等数据库存储数据。 4. 然后,最后您需要使用 GET 请求从您的服务器获取数据。 就这么简单。

      就像你最后说的,你有一个带有 socket.io 的 nodejs 应用程序,很好,你可以通过在客户端发布数据时监听 socket.io 发出的事件来获取实时数据。然后你可以在你的角度应用程序中显示这些数据。这可以通过有角度的 socket.io-client 来完成。 但是,请记住,每次重新启动应用程序时,您都必须向服务器发送一个 GET 请求以再次从数据库中获取数据(如果您正在存储它们),因为 Angular 只是一个前端框架。 希望这对您有所帮助。 如果您有任何问题,您可以发表评论。我很乐意提供帮助!

      【讨论】:

      • 是的,萨特南。我知道 Angular 不接受 POST 请求。您解释的过程已经在我的脑海中想到了,它有点冗长,但再次挑战了如何向特定客户发送响应,因为 websocket 只需要发送响应而不是所有请求的人。希望你能理解我的问题。
      • 让我简单地向您解释一下套接字是如何工作的。套接字基本上是创建一个房间,用户可以加入一个房间。一个房间可以有许多用户加入。现在,当加入的用户发出事件(在您的情况下是获取数据的请求)时,套接字将侦听该事件并通过发出用户正在侦听的另一个事件来响应,现在该事件在该房间中发出。并且所有加入该房间的用户以及侦听套接字发出的事件都将获取数据。这就是套接字的工作原理。
      • 现在你可以做两件事-1。为每个用户创建单独的房间(我不推荐,因为它很难处理) 2. 不要使用套接字,而是创建一个 REST api(我建议你使用),在 REST 中用户将发送 GET 请求只有那个用户会得到响应。如果你还有什么问题可以问
      • 客户有他自己的应用程序,他们将在 iFrame 中加载我的应用程序。在他们的应用程序中,他们有带有提交按钮的表单。一旦他们点击提交按钮,他们想要发送到我的应用程序的数千个客户 ID,我想在我的应用程序中接收这些 ID 并在 iFrame 中显示结果。我希望你现在明白了。
      • 我建议您在节点服务器中使用 express 制作一个 REST api。然后您的客户端将向您的节点服务器发送 POST 请求,然后您可以向服务器发送 GET 请求以获取数据并在您的 Angular 应用程序中显示结果。希望这对您有意义。
      【解决方案4】:

      是的,您需要一个服务器端服务器来接收请求(GET 或 POST),例如 express.js。 如果你为 Angular 和 Express 使用相同的服务器,你对 localhost:3000/api/customer 做一个 POST,然后 express 会用 JSON 或其他东西来响应。

      Angular 是客户端,因此 POST 来自客户端计算机。您无需担心需要回复哪个客户。

      【讨论】:

      • 感谢您的评论。让我们举个例子。你和我都打开了 Angular 应用程序,并且我们从其他应用程序发出请求。现在这两个发布请求 Node 将接收并发送到 Angular 应用程序,因此 Angular 应用程序将如何决定显示您和我的结果。我的一个大问题是如何将这个 POST 数据从 Node 发送到 Angular APP?
      • 节点将决定使用您的公共 IP 响应哪个客户端。请记住,Angular 是客户端,所以当我们进行 POST 时,Node 会收到 172.125.15.28(我的公共 IP)和 129.168.175.111(你的公共 IP)的 POST,然后,他会执行所有逻辑并响应每个 IP .
      • 其实,Angular 做 POST 并且 Node 会响应。使用模块 @angular/common/HTTP。 Angular App 节点会自动响应。
      • 我想发布到 Angular。不是来自 Angular。我知道这个模块并使用它来调用 REST API。
      • 你不能,Angular 不听请求。但是您可以打开一个套接字(例如,通过向 Socket.io 发送 HTTP GET)并进行监听,因此后端将数据发送到 Angular 而无需 Angular 询问。你具体想做什么?
      猜你喜欢
      • 1970-01-01
      • 2011-05-15
      • 2020-12-20
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多