提问人:Niels Koop 提问时间:9/6/2023 最后编辑:Niels Koop 更新时间:9/7/2023 访问量:50
接收 2 个 HTTP 请求,其中仅发送了 1 个
Receiving 2 HTTP request where only 1 was send
问:
我正在做一个实践项目,其中我与 Express、Mongo 和 Mongoose 合作。我正在创建一个基本的 CRUD 结构,以便以后可以添加花哨的东西。
我的路线显示了彼此下方列出的所有不同露营地。每个露营地都是一个链接,指向路线上的详细信息页面。要找到特定的露营地,我正在使用快捷功能。但是,当我进入该页面时,应用程序崩溃了。http://localhost:3000/campgrounds
a
http://localhost:3000/campgrounds/123
findById()
问题是返回 2 个值。当我转到正确的页面时,第一个值始终是正确的,但随后它返回另一个值,该值使 Node 程序崩溃。我不知道为什么它返回 2 个值,所以我希望你们中的一个人可以帮助我!req.params.id
null
目前,我在 .这样可以防止应用程序崩溃,但 chrome 会继续无限加载页面。if
app.get
http://localhost:3000/campgrounds/:id
我的索引文件
const express = require('express');
const path = require('path');
const mongoose = require('mongoose');
const Campground = require('./models/campground');
mongoose.connect('mongodb://localhost:27017/yelp-camp');
const db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error:"));
db.once("open", () => {
console.log("database connected");
});
const app = express();
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));
// Setting the route to our homepage
app.get('/', (req, res) => {
res.render('home');
});
// Setting the route to the page that displays all campgrounds
app.get('/campgrounds', async (req, res) => {
// Getting all our different campgrounds
const campgrounds = await Campground.find({});
// Rendering the campgrounds index EJS template, and sending back the campgrounds found
res.render('campgrounds/index', { campgrounds });
});
// Setting the route to the details page of a single campgrounds
app.get('/campgrounds/:id', async (req, res) => {
const { id } = req.params;
console.log(id);
if (id !== 'null') {
try {
const campground = await Campground.findById(id);
res.render('campgrounds/show', { campground });
}
catch (error) {
console.log(error);
}
}
});
app.listen(3000, () => {
console.log('Serving on port 3000');
});
当我设置通往单个露营地详细信息页面的路线时,出现问题。我目前只是强制输入一个值来检查它是否正常运行,确实如此。我的控制台 .log 返回 2 个值,就像我已经说过的那样。首先是正确的 ID,然后是一个值。findById()
null
我的架构
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const CampgroundSchema = new Schema({
title: String,
price: String,
description: String,
location: String
});
module.exports = mongoose.model('Campground', CampgroundSchema);
EJS 文件campgrounds/show
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Campground: <%= campground.title %></title>
</head>
<body>
<h1>Campground: <%= campground.title %></h1>
</body>
</html>
EJS 文件campgrounds/index
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Campgrounds</title>
</head>
<body>
<h1>All campgrounds</h1>
<ul>
<!-- Looping over our campgrounds and creating a li for each -->
<% for(let campground of campgrounds) { %>
<li><a href="/campgrounds/<%= campground._id %>"><%= campground.title %></a></li>
<% } %>
</ul>
</body>
</html>
问题
为什么 req.params.id 返回 2 个值,而不仅仅是一个值?只有 1 个 id,那么为什么它也应该返回一个值呢?null
提前致谢。
答:
发现问题...对于每个请求,由于我安装了错误的 Chrome 扩展程序,因此发送了 2 个 HTTP 请求。卸载了Chrome扩展程序,一切正常!
我设法通过在僻静的环境中测试不同的变量来解决这个问题。我还看到,在 Chrome 开发人员工具的帮助下,每次调用扩展程序后都会出现问题。也许这可以帮助其他人解决类似的问题!
评论
campgrounds/show.ejs
req.params.id
req.params.id
campgrounds/index
campgrounds/show
campgrounds/index
campgrounds/show
req.params.id