首页 > 解决方案 > 猫鼬 ObjectId href 问题

问题描述

我的网站主页上有横幅广告(滑块),链接到特定的供应商资料页面。在测试环境中,链接按预期工作。但是当我推送到生产站点时,ObjectId 不知何故从 url 中消失了,我不确定为什么。我相信我的一些代码可能配置不正确,但我不确定是什么导致了问题。

滑块型号:

let mongoose = require("mongoose");

// SCHEMA SETUP - Sliders
let sliderSchema = new mongoose.Schema({
   category: String,
   images: [ 
      {url: String, public_id: String} 
   ],
   vendorName: {
      id: {
         type: mongoose.Schema.Types.ObjectId,
         ref: "Vendor" //references user model
      },
      name: String
   },
   imageLink: String
});

module.exports = mongoose.model("Slider", sliderSchema);

滑块创建控制器:


        req.body.slider.images = [];

        if(req.files) {
            for(const file of req.files) {
                req.body.slider.images.push({
                    url: file.secure_url,
                    public_id: file.public_id
                });
            }
        }

        req.body.slider.vendorName = {
            id: req.body.slider.vendorName
        }

        // //use req.body to create a new Slider
        let slider = await Slider.create(req.body.slider);
        if(req.xhr) {
            res.json(slider);
        } else {
            res.redirect(`/slider`);       
        }
    },

在主页上显示滑块广告的代码:

        <% if (banners[0].vendorName) { %>
            <a href="/vendor/<%- banners[0].vendorName.id %>">
        <% } else { %>
            <a href="<%- banners[0].imageLink %>"> 
        <% } %>       
            <div class="banner-ad-container banner-ad-container-no-padding">
                <img alt="Banner Ad" class="banner-ad lazy" data-src="https://res.cloudinary.com/abc/image/upload/w_1500,h_300,q_auto,f_auto,fl_lossy/<%- banners[0].images[0].public_id %>">
            </div>
        </a>

在测试时,在 Chrome 开发工具中检查我可以看到 url 正确显示为 /vendor/[ObjectId of the vendor]

但是一旦推送到生产环境(站点托管在 Heroku 上),它只会显示为 /vendor/,并且 ObjectId 会丢失。

有人可以告诉我这里哪里出错了吗? 数据库中的滑块对象

标签: node.jsmongodbmongooseobjectid

解决方案


推荐阅读