【问题标题】:post method from API express & angular 10来自 API express 和 Angular 10 的 post 方法
【发布时间】:2021-03-07 05:04:47
【问题描述】:

我正在尝试使用 angular 和 express.js 做一个 post 方法来做到这一点,我创建了一个名为 index.js 的文件,我在其中添加了不同的方法,但在 Angular 的前端我想简单地添加数据,如何与反应形式有关? 我遵循了几个教程,但我尽了最大努力

谢谢。

index.js

const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.urlencoded({ extended: true }));
const parkings = require('../parkings.json');

app.use(function (req, res, next) {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
    res.setHeader('Access-Control-Allow-Credentials', true);
    next();
});

app.use(express.json());

// Get all parkings details
app.get('/parkings', (req, res) => {
    res.status(200).json(parkings)
});

// Get parkings by id
app.get('/parkings/:id', (req, res) => {
    const id = parseInt(req.params.id)
    const parking = parkings.find(parking => parking.id === id)
    res.status(200).json(parking)
});
// post
app.post('/parkings', (req, res) => {
    parkings.push(req.body)
    res.status(200).json(parkings)
})

app.listen(3000, () => {
    console.log("Listening to port 3000");
})

服务

url: string = ('http://localhost:3000');
  
  parkingForm = new FormGroup({
    name: new FormControl(),
    type: new FormControl(),
    city: new FormControl()
  });

  array: any [];

  constructor(private http: HttpClient) { }

  get(): Observable<any> {
    return this.http.get<any>(`${this.url}/parkings`);
  }

  postMethod() {
    let myFormData = new FormData();
    myFormData.append('name', this.parkingForm.value.name);
    myFormData.append('type', this.parkingForm.value.type);
    myFormData.append('city', this.parkingForm.value.city);

    return this.http.post(this.url, myFormData,
      { responseType: 'text' }).subscribe(
        (response) => this.array.push(response),
        (error) => console.log(error)
      );
  }

ts.file

 export class AppComponent implements OnInit {
  getTab: any = [];

  constructor(private parkingsService: ParkingsService) {}

  ngOnInit() {
    this.parkingsService.get().subscribe(data => {
      this.getTab = data;
    })
  };

  add() {
    this.parkingsService.postMethod();
  }
}

html

<table>
  <tr>
    <th>name</th>
    <th>type</th>
    <th>ville</th>
  </tr>
  <tr *ngFor="let parking of getTab">
    <td>{{parking.name}}</td>
    <td>{{parking.type}}</td>
    <td>{{parking.city}}</td>
  </tr>
</table>

<form [formGroup]="parkingForm">
  <div class="form-group">
    <input type="text" placeholder="enter name" name="name" formControlName="name"><br>
    <input type="text" placeholder="enter type" name="type" formControlName="type"><br>
    <input type="text" placeholder="enter city" name="city" formControlName="city"><br>
    <button (click)="add()">Ajouter</button>
  </div>
</form>

【问题讨论】:

  • 我可以立即看到的是您需要使用 this.myForm.get('formControlName').value。也许这是唯一的问题。如果还是不行,请更新代码,我再看看。
  • this.myForm.get('formControlName').value 我把那个放在哪里?我是初学者谢谢你的帮助
  • 没关系。您在服务文件的 postMethod() 中有这段代码。 this.parkingForm.value.name 应该是 this.parkingForm.get('name').value 类似地其他 myFormData.append 函数调用应该更新
  • formGroup 需要一个 FormGroup 实例。请传入一个。示例:
    在您的班级中:this.myGroup = new FormGroup({ firstName: new FormControl() });我有这个错误

标签: node.js angular api express post


【解决方案1】:
parkingForm: FormGroup;
this.parkingForm = this.formBuilder.group({
    name: ['', [Validators.required]],
    type: ['', [Validators.required]],
    city: ['', [Validators.required]]
});



constructor(private formBuilder: FormBuilder) { }

ngOnInit(){

}

add() {
    let bodyJSON={
        name:this.parkingForm.get('name').value,
        type:this.parkingForm.get('type').value,
        city:this.parkingForm.get('city').value
    }
    this.parkingsService.postMethod(bodyJSON);
}


postMethod(data) {
let myFormData = new FormData();
myFormData.append('name', data.name);
myFormData.append('type', data.type);
myFormData.append('city', data.city);

return this.http.post(this.url, myFormData,
  { responseType: 'text' }).subscribe(
    (response) => this.array.push(response),
    (error) => console.log(error)
  );

}

【讨论】:

  • 谢谢你的帮助,但我有同样的错误:Error: formGroup expects a FormGroup instance. Please pass one in. Example: &lt;div [formGroup]="myGroup"&gt; &lt;input formControlName="firstName"&gt; &lt;/div&gt; In your class: this.myGroup = new FormGroup({ firstName: new FormControl() });
  • Cannot read property '_syncPendingControls' of null 我现在有这个错误
  • 像我在代码中所做的那样更改表单初始化,不要在 ngOnInit 中做
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
  • 2020-11-25
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
相关资源
最近更新 更多