为啥 GET 请求在 Node.js 中不起作用?

Posted

技术标签:

【中文标题】为啥 GET 请求在 Node.js 中不起作用?【英文标题】:Why GET request is not working in Node.js?为什么 GET 请求在 Node.js 中不起作用? 【发布时间】:2021-05-20 14:02:45 【问题描述】:
 const express = require('express');
 const mongoose = require ("mongoose");
 const app = express();
 const Student = require('../models/students');
 require('dotenv').config();
 const PORT = process.env.PORT || 3000;
 const cors = require('cors');
 app.use(express.json());
 app.use(express.urlencoded(extended:true));
 app.use(cors());
 app.use(express.static('./dist/mean-stack-application'));


 mongoose.connect(process.env.MONGO_URL, 
   useCreateIndex: true,
   useNewUrlParser: true,
   useUnifiedTopology: true,
   useFindAndModify: false
 ).then(() => 
    console.log("Connection is Successful");
 ).catch((e) => 
    console.log("No Connection");
 );


 app.get("/studentData", async( req,res ) => 
    try
       const getStudentsData = await Student.find();
       console.log(getStudentsData);
       res.send(getStudentsData);
   catch(e)
      res.send(e);
   
 );

 app.listen(PORT, () => 
 console.log(`Connection is setup at $PORT`);
 );

角度代码

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

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

constructor(private http: HttpClient)  

 readonly baseUrl = 'https://mean-curd-app.herokuapp.com';

 readonly url = '/studentData';


 getList()
    return this.http.get(`$this.baseUrl$this.url`)
 

它在 localhost 3000 上运行,但是当我在 Heroku 上托管这个 MEAN 堆栈应用程序时,我收到错误消息,即状态代码 304。连接成功但出现问题,这就是我收到此错误消息的原因。

GitHub 源代码链接:https://github.com/SwapnilVedpathak-sv/mean-stack-application Heroku 托管链接:https://mean-curd-app.herokuapp.com

【问题讨论】:

“304”状态不是错误。它表示自上次请求以来数据没有更改。您可以检查和更新“If-None-Match”或“If-Modified-Since”标头的值以获得 200。 【参考方案1】:

这里没有错。 304 不是错误。这就是为提高效率而设置的 Web 服务器的工作方式。当合作的客户端请求他们之前在“条件 GET 请求”中请求的相同资源并且该资源自之前缓存以来没有更改时,服务器会向他们发送 304。然后客户端可以使用他们的缓存版本.

欲了解更多信息,请参阅description on MDN。

HTTP 304 Not Modified 客户端重定向响应码表示不需要重传请求的资源。它是对缓存资源的隐式重定向。当请求方法是安全的(如 GET 或 HEAD 请求)或请求是有条件的并使用 If-None-Match 或 If-Modified-Since 标头时,会发生这种情况。

您可能会在 Heroku 上看到它,因为这是您为生产部署配置的位置,因此启用了这些类型的优化。

【讨论】:

为什么在 Heroku 上托管时 GET 请求在 Node.js 中不起作用但在 Local 上起作用? 如何解决该错误,如果有,请给我解决方案。 @SwapnilVedpathak - 这不是错误。 Heroku 上的配置很可能是为更多“生产”优化而设置的,因为这是对 Web 服务器的预期优化。您必须解释为什么这会导致问题,因为这是生产级 Web 服务器的正确操作。它应该与期望并知道如何处理 304 的客户一起出现。 @SwapnilVedpathak - 查看各种 Express 优化和设置:Performance Best Practices 和 app.set() configuration optiions。

以上是关于为啥 GET 请求在 Node.js 中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥“发布”方法在我的 django 应用程序中不起作用?

为啥客户端 HTTP.get() 调用在 Cordova (Meteor 0.9.3) 中不起作用?

为啥请求 http 在 Kotlin 中不起作用?

为啥我的 cURL 请求在 XAMPP 中不起作用?

为啥我的 html 请求在 javascript 中不起作用 [重复]

***等待在最新的 Node.js 中不起作用