如何从角度组件使用我的节点端点插入数据?

Posted

技术标签:

【中文标题】如何从角度组件使用我的节点端点插入数据?【英文标题】:How to insert data with my node endpoint from an angular component? 【发布时间】:2019-09-19 13:37:07 【问题描述】:

我对 Angular 很陌生,我正在尝试设计一个简单的网页。我在 node.js 中准备好了我的后端。现在我创建了一个端点,我将数据插入到我的数据库中。它基本上是创建帖子的端点。

这是我的猫鼬模式:

const trackingPostSchema = new Schema(
    uuid: 
        type: String,
        unique: true,
      ,
    post: [
        foodUuid: String,
        pictureUrl: String,
        foodName: String,
        description: String,
        calories: Number,
        eatenAt: 
            type: Date,
            default: Date.now()
        ,
        mealTime: String, //breakfast, lunch, dinner
    ],
  );

我正在尝试使用此组件插入数据:

<nz-card style="width:300px;" nzTitle="Track what you ate today!">

  <div class="content">

    <input nz-input placeholder="Food Name" [(ngModel)]="foodName" style="max-width: 100px; min-width: 100px;" class="data"/>

    <input nz-input placeholder="Food Description" [(ngModel)]="description" style="max-width: 200px; min-width: 100px;" class="data"/>

    <label for="calories" style="margin-left: 10px">Calories: </label>
    <nz-input-number [(ngModel)]="calories" [nzMin]="1" [nzMax]="10000" [nzStep]="1" style="min-width: 100px;" class="data" id="calories"></nz-input-number>

    <nz-select
        style="width: 100px;"
        nzShowSearch
        nzAllowClear
        nzPlaceHolder="Select a meal time"
        [(ngModel)]="mealTime"
        class="data"
      >
        <nz-option nzLabel="Breakfast" nzValue="Breakfast"></nz-option>
        <nz-option nzLabel="Lunch" nzValue="Lunch"></nz-option>
        <nz-option nzLabel="Dinner" nzValue="Dinner"></nz-option>
    </nz-select>

    <button nz-button nzType="primary" class="data">Post</button>

  </div>

</nz-card>

我知道这是一个广泛的问题,但我需要遵循哪些步骤才能将此数据发送到我的后端?

【问题讨论】:

【参考方案1】:

您可以通过一个简单的 http 请求将数据发送到后端。你需要攻击一个点击处理程序到你的POST 按钮,它将调用一个函数。该函数可以将值作为对象发送到后端。

在 component.html 文件中,执行以下操作: &lt;button nz-button nzType="primary" (click)="sendDataToBackend()" class="data"&gt;Post&lt;/button&gt;

在 component.ts 文件中,这样做:

import HttpClientModule, HttpClient, HttpHeaders from '@angular/common/http';

httpOptions = 
headers: new HttpHeaders(
  'Content-Type': 'application/json'
  //'Authorization': 'Bearer ' + YOUR_AUTHENTICATION_TOKEN // Enable this if using authentication
)
;

在你的component.ts文件的类中,创建一个函数sendDataToBackend:

sendDataToBackend()
this.http.post(YOUR_ENDPOINT,foodName, description,calories,mealTime , 
this.httpOptions).toPromise().then((res) => console.log(res));

【讨论】:

【参考方案2】:

基本上,您可能需要 Rest API 来从前端到后端进行通信。

https://www.restapitutorial.com/

您需要创建一个模型来定义您的数据库架构的结构,并通过 Rest API 访问该模型以对您的数据库架构执行创建/读取/更新/删除 (CRUD) 操作。

有很多方法可以根据项目需求从结构上创建 Rest API。它基于您的项目基础架构。

1) 如果您有一个带有 API 的后端模块被定义为一个单独的项目,

您可以编写一个中间件组件,使用 http.Post 函数导入 angular 的 HTTP 模块。

发布方法说明: post(url: string, body: any, options?: RequestOptionsArgs) : Observable

有关 Angular HTTP 的更多详细信息:https://angular.io/guide/http

2) 如果您没有后端模块项目,并且需要一个

使用 Rest API 创建一个项目,该项目定义了将数据插入数据库的逻辑。 有许多现成的框架可以创建 Rest API,其中一个使用 Express.js 的框架是 Loopback https://v4.loopback.io/getting-started.html。 (了解字体脚本是学习这个的唯一前提)

创建后端(一般来说是网络层)项目后,按照步骤 1 插入数据。

还有许多其他现成的框架可以在不同的技术上创建您的 Rest API。您可以根据自己的堆栈选择一个。

3) 如果您不想要一个单独的后端项目,请将 Rest API 节点模块安装到您的 Angular 项目中(著名的结构化模块是 express.js)并创建 Rest API 以连接到您的数据库。按照步骤 1 通过调用这些 API 插入数据。

4) 如果您不想要一个单独的后端项目,也不想要一个框架,您仍然可以使用运行 Angular 的普通 node.js 来创建 Rest API。但它可能需要大量的样板和复杂的编码。

【讨论】:

以上是关于如何从角度组件使用我的节点端点插入数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在角度2中将数据从父构造函数传递到子组件

如何在角度中使用单个组件作为页面和 MatDialog

如何在彼此不直接链接的角度组件之间共享数据?

从服务传递到组件的角度错误消息

如何在角度 4 中使用 ng-bootstrap 将数据模态组件传递给父组件

从角度组件获取数据