为啥 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 中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
为啥客户端 HTTP.get() 调用在 Cordova (Meteor 0.9.3) 中不起作用?