Node.js 我的https.post函数如何知道从API调用哪个函数

Node.js 我的https.post函数如何知道从API调用哪个函数,node.js,angular,mongodb,express,Node.js,Angular,Mongodb,Express,我的服务文件,用于从mongoDB发送/获取数据: import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { filter, isEmpty, map } from 'rxjs/operators'; import { Employee } from './employee'; import { Observable } from 'rxjs';

我的服务文件,用于从mongoDB发送/获取数据:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { filter, isEmpty, map } from 'rxjs/operators';
import { Employee } from './employee';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class DataService {
  constructor(private http: HttpClient) { }
  uri = 'http://localhost:4000/employees';
  data: Employee[];

  addEmployee(empObj) {
    this.http.post(`${this.uri}`, empObj).subscribe(res => { console.log('Done') })
    alert('Done adding data');
  }

  getEmployees(): Observable<Object> {

    return this.http.get(`${this.uri}`)
  }
  getEmployee(id: number): any {
    return this.http.get('https://api.myjson.com/bins/mpg19')
  }
  deleteEmployee(id: number) {
    console.log('ID of employee to be deleted', id);
    return this.http.get(`${this.uri}/delete/${id}`);
  }
}

我的应用程序正在正确地获取和获取数据,因为我遵循的是一个书面教程,我在理解代码时有点困惑。也就是说: 我的
addEmployee(empObj)
函数(在第一个文件中)如何知道从CRUD文件调用哪个函数。
感谢是进步。

这里有几件事你需要更加熟悉

HTTP服务器vs HTTP客户端

HTTP客户端负责向服务器发送HTTP(s)请求。当它发送此请求时,通常无法知道服务器a)是否将接受该请求,或者b)服务器将如何处理该请求。因此,当您调用http.post()时,您的http客户端不知道服务器将如何处理该请求。您可以将此视为http客户端发送给服务器的消息,其中包含一些说明和详细信息

您的HTTP服务器负责接受、验证和路由传入请求,以及响应这些请求。只有您的服务器知道它想要如何处理传入的请求,以及它是否会接受或拒绝它们(或者至少应该是这样)

您可以在此处了解有关HTTP工作原理的更多信息:

休息

正如您的HTTP客户机无法知道您的服务器将如何处理特定的HTTP请求一样,您(开发人员)也无法轻松地对HTTP服务器及其所有潜在有价值的数据进行推理。正是出于这个原因,REST旨在建立一套围绕互联网上结构化内容(或
资源
)而设计的原则,用合理的方式描述这些资源,并用常见的英语动词(GET、PUT、DELETE、POST等)轻松地处理这些资源

您可以在此处阅读有关REST的更多信息(并找到相关链接):

快速路由

Express充当HTTP服务器上的软件路由层。必须了解,这意味着express负责在服务器上创建和注册指向资源的虚拟路由。例如,当您这样做时:
http.post('http://myserver.com/api/employees');
您实际上要求express(在本例中)尝试查找路径为“api/employees”的已注册路由,并在适当的情况下使用一个或多个资源进行响应


因此,为了直接回答您的问题,Angular的HTTP客户端不知道将在Express HTTP服务器上运行哪个函数。您的Express服务器使用路由
http://localhost:4000/employees
确定您需要的资源类型。在本例中,它查找注册到“employees”的路由,并验证该路由是否接受帖子。如果它确实接受POST,那么它将执行与该注册路由相关联的回调。

阅读有关REST模式的更多信息n practices将被清除,谷歌搜索,但仍然有困惑,这就是为什么在这里发布。如果你有任何有用的资源用于上述目的,请为我提供一个链接,从技术上讲,进入这个url应该给你一个列表,在这个url上的帖子应该添加一个员工,这就是你第二个文件中的定义。GET on此应用程序应返回单个员工,修补程序或应用程序此应用程序应更新员工的详细信息,而DELETE on应用程序应从DB中删除员工如果您在GET请求中选择自定义路由进行删除,这将非常糟糕。希望这能让我的眼睛,我的删除功能不工作。即使我现在使用的是
delete
http方法,我该怎么做才能使它工作呢?错误是什么?
const express = require('express');
const app = express();
const employeeRoute = express.Router();

let Employees = require('../models/Employee');


employeeRoute.route('/').post(function (req, res) {
    console.log('coming here', req.body)
    let employee = new Employees(req.body);
    console.log('data to save is: ', employee)
    employee.save().then(employee => { res.status(200).json({ 'employee': 'Employee added in successfully' }) })
})


employeeRoute.route('/').get(function (req, res) {
    console.log('Employees Fetched');
    let employees = [];
    Employees.find({}, function (err, results) {
        if (err) {
            console.log(err);
        }
        else {
            employees = results;
            res.json(employees);
        }
    })
})

employeeRoute.route('/delete/:id').get(function (req, res) {
    console.log('Delete Function Called')
    Employees.findByIdAndRemove({ id: req.params.id }), function (err, Employees) {
        console.log('Id against which employee is deleted: ', id);
        if (err) res.json(err);
        else res.json('Successfully removed');
    }
});
module.exports = employeeRoute