mongodb 收到2个HTTP请求,但只发送了1个

zphenhs4  于 2023-10-16  发布在  Go
关注(0)|答案(1)|浏览(123)

我正在做一个实践项目,在这个项目中,我与Express、Mongo和Mongoose合作。我正在创建一个基本的CRUD结构,以便以后可以添加花哨的东西。
我的http://localhost:3000/campgrounds路线显示了所有不同的露营地列在彼此下面。每个露营地都是一个a链接,指向路线http://localhost:3000/campgrounds/123上的详细信息页面。为了找到特定的露营地,我使用express函数findById()。然而,当我进入该页面时,应用程序崩溃。
问题是req.params.id返回两个值。当我转到正确的页面时,第一个值总是正确的,但随后它返回另一个null值,这使Node程序崩溃。我不知道为什么它返回两个值,所以我希望你们中的一个可以帮助我!
目前,我在到http://localhost:3000/campgrounds/:idapp.get路由中包含了一个if语句。这可以防止应用程序崩溃,但Chrome会继续无限加载页面。

我的索引

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');
});

当我设置路线到一个露营地的详细信息页面时,问题就出现了。我目前只是强制输入一个值来检查findById()是否正常工作,它确实正常工作。我的console.log返回了我已经说过的两个值。首先是正确的id,然后是null值。

我的schema

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返回两个值,而不是一个?这里只有一个id,为什么还要返回null值呢?
先谢了。

iyr7buue

iyr7buue1#

发现问题…对于每个请求,2个HTTP请求被发送,因为我安装了一个坏的Chrome扩展。卸载了Chrome扩展程序,一切都正常工作!
我在一个隐蔽的环境中通过测试不同的变量设法解决了这个问题。在Chrome开发者工具的帮助下,我还看到,每次调用扩展程序后都会出现这个问题。也许这可以帮助别人有类似的问题!

相关问题