通过Angular App和NodeJS向快递服务器发送GET / POST请求时如何修复404 Not Found

Posted

技术标签:

【中文标题】通过Angular App和NodeJS向快递服务器发送GET / POST请求时如何修复404 Not Found【英文标题】:How to fix 404 Not Found when sending GET/POST requests to express server via Angular App and NodeJS 【发布时间】:2019-08-17 07:59:03 【问题描述】:

我正在尝试创建一个使用 NodeJS 将 GET 和 POST 请求发送到快速服务器的 Angular 应用程序。

当我为应用程序提供服务时,GET 和 POST 请求本应发送到我的本地服务器,但我在控制台中收到错误消息,此错误记录在下方。

另外,当我访问 localhost:3000 时,服务器正在运行。

这是我的组件类:

import  Component, OnInit  from "@angular/core";
import  RootService  from "./root.service";

@Component(
  selector: "app-root",
  templateUrl: "./root.component.html",
  styleUrls: ["./root.component.css"]
)
export class RootComponent implements OnInit 
  constructor(private rootService: RootService) 

  ngOnInit() 
    this.rootService.getAPIData().subscribe(
      response => 
        console.log("response from GET API is ", response);
      ,
      error => 
        console.log("error is ", error);
      
    );

    this.rootService.postAPIData().subscribe(
      response => 
        console.log("response from POST API is ", response);
      ,
      error => 
        console.log("error during post is ", error);
      
    );
  

这里是 root.service.ts:

import  Injectable  from '@angular/core';
import  HttpClient  from '@angular/common/http';

@Injectable(
  providedIn: 'root'
)
export class RootService 

  constructor(private http: HttpClient)  

  getAPIData()
    return this.http.get('/api/getData')
  

  postAPIData()
return this.http.post('/api/postData', 'firstName' : 'Code', 'lastName' : 'Handbook')
  

这是我的服务器代码:

const express = require('express')
const app = express()
const bodyParser = require('body-parser')

app.get('/', (req, res) => 
res.send('Welcome to Node API')
)

app.get('/getData', (req, res) => 
res.json('message': 'Hello World')
)

app.post('/postData', bodyParser.json(), (req, res) => 
res.json(req.body)
)

app.listen(3000, () => console.log('Example app listening on port 3000!'))

我也有这个 proxy.conf.json 文件:


  "/api/*": 
    "target": "http://localhost:3000",
    "pathRewrite": "^/api" : ""
  

当我为我的应用提供服务时,我会在控制台中获得以下输出:

错误是 Object headers: …, status: 404, statusText: "Not Found", url: "http://localhost:4200/api/getData", ok: false, name: "HttpErrorResponse", message: "Http failure response for http://localhost:4200/api/getData: 404 Not找到”,错误:“\n\n\n\n错误\n\n\n

无法获取 /api/getData
\n\n\n" root.component.ts:18:8 发布期间的错误是 Object headers: …, status: 404, statusText: "Not Found", url: "http://localhost:4200/api/postData", ok: false, name: "HttpErrorResponse", message: "Http failure response for http://localhost:4200/api/postData: 404 Not找到”,错误:“\n\n\n\n错误\n\n\n
无法 POST /api/postData
\n\n\n”

有人可以帮我解决这个错误吗?

【问题讨论】:

【参考方案1】:

我认为您需要在启动 Angular 应用程序时传入 proxy.conf 的路径。

参考:https://github.com/angular/angular-cli/blob/master/docs/documentation/stories/proxy.md

【讨论】:

【参考方案2】:

您的配置应如下所示:


  "/api": 
    "target": "http://localhost:3000",
    "pathRewrite": 
      "^/api": ""
    
  

【讨论】:

嗨,我已经更新了我的 proxy.cons.json 但不幸的是我仍然遇到同样的错误 你是否在你的 webpack 配置中包含了这个? 你是用这个命令启动的吗?:ng serve --proxy-config proxy.conf.json 我的 package.json 中有 "start": "ng serve --proxy-config proxy.conf.json", devTools 中有什么?如果您将带有/api 的路由添加到您的节点服务器 - 是否会收到您的请求?您的 HTTP 客户端使用什么端口发送请求?【参考方案3】:

1.首先在根目录下创建一个文件 "proxy.config.json" 并在里面添加这些行:


  "/api/*": 
    "target": "http://localhost:3000",
    "secure": false,
    "logLevel": "debug"
  

2。在脚本下的“angular.json”上:

     "start": "ng serve --proxy-config proxy.config.json",

3.在终端上写“npm start”

  note: Don't write "ng serve" , it won't run proxy configuration file.

【讨论】:

以上是关于通过Angular App和NodeJS向快递服务器发送GET / POST请求时如何修复404 Not Found的主要内容,如果未能解决你的问题,请参考以下文章

通过 Observable 从 Angular 向 nodejs 发送 POST 请求

在开发中设置用于从 Angular 向 NodeJS 发送 API 请求的服务器端口

在 NodeJS 中向外行用户隐藏 Web 服务

在客户端 (Angular) 和服务器 (NodeJs) 上共享 Objectdefinition

如何在同一端口 4200 上运行 angular 4 app 和 nodejs api 用于生产和开发?

如何通过部署在 Heroku 上的 Nodejs/Nestjs 服务器为我的 Angular 前端提供服务?