如何将号码从 Angular 发送到 node.js

How to send a number to node.js from Angular

我正在使用 Angular、Node 和 mySQL 进行全栈开发。我必须将用户在 HTML 上单击的列表的索引号发送到 node.js,然后我必须从 mySQL 中删除该索引行。但是,我收到一个不寻常的错误。这是我的代码:

HTML

<tbody *ngFor = "let db of dbData" >
          <tr>
            <td>{{+db.idoffice + +1}}</td>
            <td>{{db.ProjectName}}</td>
            <td>{{db.FiscalYear}}</td>
            <td>{{db.TaskDescription}}</td>
            <td>{{db.ConcernedDepartment}}</td>
            <td>{{db.ActivityType}}</td>
            <td>{{db.Quarter}}</td>
            <td>{{db.kra}}</td>
            <td>{{db.CurrentStatus}}</td>
            <td>{{db.ResourceName}}</td>
            <td>{{db.Notes}}</td>
            <td><button class = "btn btn-success nc-icon nc-refresh-69" name="button"></button></td>
            <td><button class = "btn btn-danger nc-icon nc-simple-delete" name="button" (click) = 
            "onDeletePosts(db.idoffice)"></button></td>
          </tr>
        </tbody>

Angular

private onDeletePosts(delData)
    {
      this.http.delete('http://localhost:3000/del', delData)
      .subscribe(responseData => {
        console.log(responseData);
      });
    }

Node.js

router.delete("/del", (req, res) => {
var del = req.body.delData;
console.log(del);

mysqlConnection.query("DELETE FROM office WHERE idOffice == ?", del , (err, results) => {
  if(!err)
  {
    res.send(results);
  }
  else
  {
    console.log("Error occured while deleting" + err.message);
  }
})
})

这是我遇到的错误:

undefined       //somehow the data from angular to node isn't being received                                                                                                               
Error occured while deletingER_PARSE_ERROR: You have an error in your SQL syntax; check the manual 
that corresponds to your MySQL server version for the right syntax to use near '== ?' at line 1 

它说查询语法有问题。

您使用的比较运算符是“==”。 MySQL中没有双等号,所以应该是“=”

Angular

private onDeletePosts(del_id)
    {
      this.http.delete(`http://localhost:3000/del/${del_id}`)
      .subscribe(responseData => {
        console.log(responseData);
      });
    }

node.js

router.delete("/del/:del", (req, res) => {
    const { del } = req.params;
    console.log(del);
    mysqlConnection.query("DELETE FROM office WHERE idOffice == ?", del, (err, results) => {
        if (!err) {
            res.send(results);
        }
        else {
            console.log("Error occured while deleting" + err.message);
        }
    })
})

Angular HttpClient 的 delete 方法在其参数中没有主体。相反,您可以将 ID 作为 URL 查询参数发送。

Angular

import { HttpClient, HttpParams } from '@angular/common/http';

private onDeletePosts (delData: any) {
  const params = new HttpParams().set('id', delData);
  this.http.delete('http://localhost:3000/del', { params }).subscribe({
    next: responseData => { console.log(responseData); },
    error: error => { console.log(error); }
  });
}

Node.js

router.delete("/del", (req, res) => {
  var id = req.query.id;
  console.log(id);

  mysqlConnection.query("DELETE FROM office WHERE idOffice == ?", id, (err, results) => {
    if (!err) {
      res.send(results);
    } else {
      console.log("Error occured while deleting" + err.message);
    }
  })
})